这是我的.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
如何修复此重写规则?
答案 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而不是正斜杠。
欢迎你。