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

Oli*_*app 2 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]
Run Code Online (Sandbox Code Playgroud)

这不幸的是没有重定向任何东西.

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

我在哪里错了?

Joa*_*son 9

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

其次,你的规则;

RewriteCond %{REQUEST_FILENAME} !^/
Run Code Online (Sandbox Code Playgroud)

...排除的东西所有的请求开始/,也就是所有的URI,被重写.你可能想要做的是;

RewriteCond %{REQUEST_URI} !^/$
Run Code Online (Sandbox Code Playgroud)

被忽略文件的规则最后可能还有一个额外$的"结束"匹配而不是"包含"匹配.

这留下了类似的东西;

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