重写和url解码

时间:2011-12-11 13:26:39

标签: url mod-rewrite rewrite decode

似乎一个网站以糟糕的方式链接到我的网站。 从谷歌网站管理员工具我看到一些404错误

domain.com/file.php?id=1 (404) Not found    (Date)

此网址正常,但由于浏览器页面解码,真实(404)网址

domain.com/file.php%3Fid%3D1 (this is what my browser displays in the url input when I click on google url)

我的第一次尝试是

RewriteRule ^(.*)\%3F(.*)$ $1?$2 [R=301, L]

%3F更改为“?”,但不起作用。它真实地混淆了什么,什么是解码的。

由于

3 个答案:

答案 0 :(得分:0)

嗯,试试这个:

RewriteRule ^(.*\%3F.*)\%26([^%]*)(\%3D)?(.*)$ $1&$2=$4 [N]
RewriteRule ^(.*)\%3F([^%]*)(\%3D)?(.*)$ $1?$2=$4 [R=301,L]

编辑:我看到你已经测试了%3F ...如果那不起作用,那么其他东西可能会出现。

答案 1 :(得分:0)

这不是一个优雅的解决方案,但几个月后,这是我找到的唯一方法。

常规案例

domain.tld/dir/file.php?id=UID&qty=NUM&...   (from old site structure)

被重写为

domain.tld/newfile.php?id=UID&qty=NUM&... [R=301,L]

所以,对于像

这样的请求
domain.tld/dir/file.php%3Fid%3DUID%26qty=NUM%26...   (from old site structure)

我执行

RewriteRule ^dir/file\.php(.*)$ script.php?qs=$1 [R,L]

这必须在涉及dir / file.php

的所有指令之后

然后我可以在script.php中处理查询字符串$ _GET ['qs']

它可能不适用于会进入循环或不良结果的其他情况。

答案 2 :(得分:0)

在RewriteRule中使用[NE]标志