mod_rewrite:如何将除2个文件之外的所有内容重定向到“/”?

时间:2013-06-12 13:29:26

标签: apache .htaccess mod-rewrite url-redirection

我对mod_rewrite配置有点问题。

我想将所有内容重定向到根目录(http://www.mydomain.com/),但两个文件除外。

所以我尝试了这个:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^/
RewriteCond %{REQUEST_FILENAME} !/file1.html
RewriteCond %{REQUEST_FILENAME} !/file2.html
RewriteRule ^(.*)$ http://www.mydomain.com/ [L,R=301]

这不幸地没有重定向任何东西。

如果我省略第一条RewriteCond行,我会收到重定向错误。

我在哪里出错?

1 个答案:

答案 0 :(得分:9)

首先,您可能希望使用REQUEST_URI代替REQUEST_FILENAME。它们在虚拟主机方案中可能相同,但通常不一样。您可能意味着重写URI,而不是本地路径。

其次,你的规则;

RewriteCond %{REQUEST_FILENAME} !^/

...排除对所有/ 开头的内容的请求,即所有 URI,不被重写。你想做的可能是;

RewriteCond %{REQUEST_URI} !^/$

被忽略文件的规则最后应该有一个额外的$,而不是“包含”匹配,而不是“包含”匹配。

留下类似的东西;

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !/file1.html$
RewriteCond %{REQUEST_URI} !/file2.html$
RewriteRule ^(.*)$ http://www.mydomain.com/ [L,R=301]