我已经为一个客户构建了一个新的PHP站点,并希望将排名靠前的Google结果从旧站点结构重定向到新站点。
我已经在documentroot的.htaccess中放置了几十个重定向301,虽然有些工作正常,但我对其他一些有问题。
这样做效果很好:
Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152
这不起作用!(导致一个404,因为重定向被简单地跳过):
Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html
Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html
.htaccess文件中混合了重定向,只有带有GET参数的重定向才会失败。
是否有解决方法?忽略失败的重定向对客户来说不是一个选项。感谢您的想法。
3条答案
按热度按时间qzwqbdag1#
虽然秋葵汤的答案推理是正确的,但我无法让他的重写规则工作。
添加另一个RewriteCond就可以了。下面的代码已经过测试,工作正常。
rryofs0p2#
同意秋葵浓汤和马丁的回答......但是:
Martijn的拼写错误,REQUEST_URI条件的正则表达式开头应为“^”:
我也只能让Martijn的,而不是秋葵汤的,在我的.htaccess文件所在的地方工作。
此外,如果不希望参数字符串随重写一起传递,则应在URL的末尾添加“?”:
否则,按照Martijn的代码,它会显示“如果您的URL是/nl/index.php?mID=24511&subID=0,则重定向到http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0,重定向头为301 Permanent,并且不处理此URL上的更多规则”
这可能是也可能不是你想要的,公平地说,如果参数不被理解,它们将被忽略而不会造成任何伤害,所以这可能不会有什么影响。但是,如果你想将用户重定向到一个新的页面,并且想要“漂亮的URL”,那么去掉参数字符串是更好的选择,所以在目标URL的末尾粘贴“?”。
n3ipq98p3#
Redirect
只对URL路径进行操作:旧的 URL-path 是以斜杠开头的区分大小写(%-decoded)路径。[...]
因此,不会检查URL查询(第一个
?
之后到第一个#
之后的部分)。但是您可以使用mod_rewrite来执行此操作: