【问题标题】:mod_rewrite: rewrite specific URLmod_rewrite:重写特定的 URL
【发布时间】:2010-07-16 07:52:24
【问题描述】:

我想重写一个特定的 URL,我将展示一个示例,以便您理解我的意思。

首先,我目前的重写规则:

重写规则 ^/?([a-zA-Z0-9/-]+)/?$ /index.php [NC,L]

现在我想要这个网址:

http://example.tld/foobar?tes​​t

改写为:

http://example.tld/foobar

注意:仅适用于/foobar?test!例如。不适用于/somethingelse?test,也不适用于/foobar?blah

提前致谢!

编辑: 我意识到我想要从 /foobar?test/foobar 的 301 重定向,而不是“传统”重写。希望这是可能的。

【问题讨论】:

    标签: apache .htaccess mod-rewrite rewrite


    【解决方案1】:
    RewriteCond %{QUERY_STRING}    ^test$
    RewriteRule ^/foobar$          /foobar      [NC,R=301,L]
    

    【讨论】:

    • @Fabian:你不能重定向到REQUEST_FILENAME!我想你的意思是%{REQUEST_URI},呵呵。
    • @tshabalala:另外,如果您将此规则放在其他可能匹配的规则之前,请在标志中添加 L,否则重定向可能会被废弃。
    • @Tim Heh ye 谢谢:D。顺便说一句,当我们添加一个 R 时,L 就已经过时了。
    • @Fabian:没问题!至于L 标志,这实际上不是真的。 R 对 3xx 状态码所做的所有事情都是记下标头更改并添加主机信息。如果您希望立即执行重定向,则需要指定L 标志。 mod_rewrite 文档在 R 标志描述下记录了这一点:httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule
    • @Tim 你是对的,“要停止重写,你应该添加 'L' 标志。”你应该发布一个答案,这样我就可以投票给你:D。
    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多