这个重写规则有什么问题?

时间:2015-12-07 17:58:14

标签: .htaccess mod-rewrite

这是我的.htaccess文件中的规则:

RewriteRule ^add/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ add.php?link=$1&email=$2 [PT,L,QSA]

以下是无法使用的链接(找不到网页):

http://www.example.com/add/http%3A%2F%2Fwww.example.com%2F/web%40web.com

这里有可行的版本(虽然不是我希望的格式):

http://www.example.com/add.php?link=http%3A%2F%2Fwww.example.com%2F&email=web%40web.com

如何修复此重写规则?

2 个答案:

答案 0 :(得分:1)

您的正则表达式[A-Za-z0-9-]不匹配%3A%2F等,请尝试以下操作:

Options -MultiViews
RewriteEngine On

RewriteRule ^add/(.+)/([^/]+)/?$ add.php?link=$1&email=$2 [NC,L,QSA]

默认情况下,Apache中不允许%2F。使用

AllowEncodedSlashes Decode

在你的Apache配置中允许它否则如果在调用404之前,如果URL中有任何%2F,Apache将抛出mod_rewrite

答案 1 :(得分:0)

好的,我已经解决了这个问题并且需要进行大量的研究,因为我不像这里的一些人那么有才华。无论如何,我以为我会分享这个解决方案。

基本上,服务器会在使用后立即对%2F进行过早解码,因此最终会出现完全错误的路径。

您需要做的是在客户端用%2F替换%252F

这是%2F的双重编码形式。

因此,当它到达服务器时,它会过早地被解码为%2F而不是正斜杠。

欢迎你。