似乎一个网站以糟糕的方式链接到我的网站。 从谷歌网站管理员工具我看到一些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
更改为“?
”,但不起作用。它真实地混淆了什么,什么是解码的。
由于
答案 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]标志