我对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行,我会收到重定向错误。
我在哪里出错?
答案 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]