对于时事通讯,我正在尝试为取消订阅页面制作干净的网址
起初我有这个,但它无法正常工作:
RewriteEngine On
RewriteBase /
RewriteRule ^/unsubscribe/(.*)$ /unsubscribe.php?email=$1 [NC,L]
我认为这很奇怪。所以我尝试了其他一些方法,结果如下:
RewriteEngine On
RewriteBase /
RewriteRule ^/?unsubscribe/?(.*)$ /unsubscribe.php?email=$1 [NC,L]
事实上,这是有效的。但它给出了非常奇怪的结果。
电子邮件参数值现在是:
.PHP /测试
这让我疯了,因为我不明白为什么会这样做。
有没有人知道这里发生了什么以及如何解决这个问题?
我宁愿不用字符串替换php,这里有问题。
答案 0 :(得分:1)
你好,我的朋友? :)
你可以尝试一下,让我知道它是否有效?让我们弄清楚这一点!
RewriteEngine On
RewriteRule ^取消订阅/([^/.]+)/?$ unsubscribe.php?email = $ 1 [L]
答案 1 :(得分:1)
您的第一个规则不起作用,因为该规则获取了URL中的基础。因此,如果网址为/unsubscribe/my@email
,则RewriteBase
(/
)会被删除,而RewriteRule
会看到unsubscribe/my@email
而没有前导/。} p>
在您的第二条规则中,由/
设置为?
- es。因此unsubscribe.php/test
会找到文字unsubscribe
,并将其背后的所有内容 - .php/test
- 并将其放入电子邮件参数中。猜测您在测试时应该在浏览器中使用/unsubscribe/test
,而不是/unsubscribe.php/test
。
答案 2 :(得分:1)
此规则适用于您:
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^/?unsubscribe(?:/(.+))?$ /unsubscribe.php?email=$1 [NC,L,QSA]
问题出在你的正则表达式中,它在第一次应用后与模式匹配并重写两次。
答案 3 :(得分:0)
好的,它解决了。
默认情况下,似乎启用了MultiViews(无论可能是什么)。
添加:
Options -MultiViews
对htaccess(或apache config)修复了问题。