2

我对 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 行,我会收到重定向错误。

我在这里哪里做错了?

4

1 回答 1

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]
于 2013-06-12T13:47:38.270 回答