【问题标题】:mod_rewrite: how to redirect everything except 2 files to "/"?mod_rewrite:如何将除 2 个文件之外的所有内容重定向到“/”?
【发布时间】:2013-06-12 21:47:38
【问题描述】:

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

我哪里出错了?

【问题讨论】:

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


    【解决方案1】:

    首先,您可能希望使用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]
    

    【讨论】:

    • 我自己找到的!这和你建议的完全一样,约阿希姆 - 但无论如何谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多