【问题标题】:Apache2 rewrite strange behavioursApache2 重写奇怪的行为
【发布时间】:2014-01-11 06:48:10
【问题描述】:

对于时事通讯,我正在尝试为取消订阅页面制作干净的网址

起初我有这个,但它不起作用:

RewriteEngine On
RewriteBase /
RewriteRule ^/unsubscribe/(.*)$ /unsubscribe.php?email=$1 [NC,L]

在我看来这很奇怪。所以我尝试了其他一些方法,结果如下:

RewriteEngine On
RewriteBase /
RewriteRule ^/?unsubscribe/?(.*)$ /unsubscribe.php?email=$1 [NC,L]

事实上,这是有效的。但它给出了非常奇怪的结果。

email 参数值现在是:

.php/测试

这让我发疯了,因为我不明白它为什么会这样。

有没有人知道这里发生了什么以及如何修复它?

我宁愿不以字符串替换php,这里有问题。

【问题讨论】:

    标签: apache .htaccess mod-rewrite clean-urls


    【解决方案1】:

    我的朋友,你好吗? :)

    你能试试这个并告诉我它是否有效吗?让我们解决这个问题!

    重写引擎开启

    RewriteRule ^unsubscribe/([^/.]+)/?$ unsubscribe.php?email=$1 [L]

    【讨论】:

    • 感谢您的回复,我尝试了您的规则,它什么也没做。似乎正斜杠被忽略了。很奇怪
    【解决方案2】:

    您的第一个规则不起作用,因为该规则获取了 URL 中基础后面的内容。因此,如果 URL 是 /unsubscribe/my@emailRewriteBase (/) 将被删除,RewriteRule 将看到 unsubscribe/my@email 没有前导 /。

    在您的第二条规则中,/-es 都被 ? 设为可选。所以unsubscribe.php/test 会找到文字unsubscribe,并把它后面的所有东西——.php/test——放在email 参数中。猜猜你应该在测试时在浏览器中使用/unsubscribe/test,而不是/unsubscribe.php/test

    【讨论】:

    • 感谢您的回复。我没有在浏览器中使用 /unsubscribe.php/test,只是 /unsubscribe/test 我更改了 htaccess 并删除了 RewriteBase 并将规则替换为:RewriteRule ^/unsubscribe$ /unsubscribe.php?email=test [NC ,L] 这也不起作用;只是一个空参数。
    • 离开 RewriteBase,但将您的模式 ^/unsubs... 更改为 ^unsubs...(删除前导斜杠)。就像 WarriorTurtle 建议的那样,但也有 RewriteBase /,就像你在第一个示例中那样。
    • RewriteEngine On RewriteBase / RewriteRule ^unsubscribe$ unsubscribe.php?email=test 不起作用,它似乎忽略了斜杠或其他东西
    【解决方案3】:

    这条规则应该适合你:

    Options -MultiViews
    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^/?unsubscribe(?:/(.+))?$ /unsubscribe.php?email=$1 [NC,L,QSA]
    

    问题出在您的正则表达式中,它在第一次应用后与模式匹配并进行了两次重写。

    【讨论】:

      【解决方案4】:

      好的,解决了。

      似乎默认启用了 MultiViews(无论是什么)。

      添加:

      Options -MultiViews
      

      到 htaccess(或 apache 配置)解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2021-05-26
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 2012-06-13
        • 1970-01-01
        相关资源
        最近更新 更多