【发布时间】:2014-07-16 21:14:31
【问题描述】:
我希望使用 htaccess/mod_rewrite 将域上的所有页面永久重定向到 SAME 域上的一个页面。
基本上,我希望为域请求的任何页面在 domain.com/ 处返回一个保留页面 [即 index.php]
到目前为止,我的大多数尝试都导致错误,因为它们使服务器陷入循环。
提前致谢
.k
【问题讨论】:
标签: apache .htaccess mod-rewrite http-status-code-301
我希望使用 htaccess/mod_rewrite 将域上的所有页面永久重定向到 SAME 域上的一个页面。
基本上,我希望为域请求的任何页面在 domain.com/ 处返回一个保留页面 [即 index.php]
到目前为止,我的大多数尝试都导致错误,因为它们使服务器陷入循环。
提前致谢
.k
【问题讨论】:
标签: apache .htaccess mod-rewrite http-status-code-301
您需要像这样排除要重定向到的目的地:
RewriteEngine on
RewriteRule !^index\.php$ /index.php [L,R=301]
如果你只想重定向无法映射到文件系统中现有文件的请求,添加这个条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ /index.php [L,R=301]
但在这种情况下,您应该使用 404 响应。
【讨论】:
这是一个简单的实现:
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
还有一个更复杂的:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
两者均取自Zend Framework Zend_Controller Programmer's Reference Guide。这是另一个有用的文档Apache Module mod_rewrite。
【讨论】:
R=301 标志意味着告诉您的Apache 服务器始终强制将所有请求重定向到index.php,顺便说一句,这本身就是一个请求,并且一次又一次地被重定向。浏览器只是以无限循环结束,这当然完全破坏了整个事情。
ISR 最近在这里问过这个问题 - 但我现在找不到 q。
为什么不直接设置 404 错误处理程序以指向保留页面(并将所有其他内容排除在文档根目录之外)
C.
【讨论】:
谢谢大家,
得到它的工作,这可能对其他人有帮助:
重写规则!^(index.php)|.(js|ico|gif|jpg|png|css|mp3|xml|swf)$ /index.php [L,R=301]
.k
【讨论】: