【问题标题】:How to make a catch-all handler in an .htaccess file?如何在 .htaccess 文件中创建一个包罗万象的处理程序?
【发布时间】:2010-05-11 05:00:44
【问题描述】:

我想在 .htaccess 文件的末尾创建一个规则,以捕获在此之前未能匹配的所有内容。

我该怎么做?

附注我已经尝试了一切:)实际上,我没有,但看起来确实如此!

更新:有些人回复RewriteRule ^.*$ 或类似的。 这不起作用!它将匹配所有内容,包括其他“好的”网址。

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    这里实际上已经有一些很好的答案,但你已经回复了......

    但是这匹配了包括好东西在内的所有内容。

    这是因为您没有告诉 mod_rewrite 停止处理匹配。为此,请在每条规则后使用“L”标签,它告诉 mod_rewrite “如果匹配此规则,则停止处理任何进一步的规则”。

    RewriteRule ^RSS/([^/\.]+)/?$ rss.php?Page=$1 [L]
    

    您需要将其放在每个规则之后。然后,当你把 catch all 放在最后时,只有在没有其他规则匹配的情况下才会被命中。

    注意:如果您还提供未重写的资源,例如 CSS、图像、javascript 文件 - 老实说,您最好不要捕获所有资源,因为您不想重写它们的位置。

    【讨论】:

    • 我试过了。 [L] 显然不适用于 .htaccess 文件 - 仅适用于 vhosts.confapache2.conf
    • 另外,CSS、图像等有一个单独的规则——我只是在问题中省略了它。
    【解决方案2】:

    听起来您想查看 RewriteRule 指令。 Quie 可能类似于以下内容:

    重写规则 ^/(.+) {目标}

    这将匹配根 URL (/) 并将其重定向到 {target} url。

    【讨论】:

    • 但这会导致所有个URLs去指定的目标。
    【解决方案3】:

    RewriteRule .* page.php [L]?

    【讨论】:

    • 如果你把它放在最后,那么所有的好东西都应该事先匹配。
    • 请允许我引用 IRC 上某人的话:.htaccess files are re-evaluated over and over and over and over and over until the rules stop matching. 我的实验也同意这一点。
    • @GeorgeEdison 标志[L] 表示最后一条规则。如果此规则成功,则不会处理更多规则。
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多