我已经为客户建立了一个新的PHP网站,并希望将排名靠前的谷歌结果从旧的网站结构重定向到新的网站结构。
我已经在文档根目录的.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参数的重定向似乎失败。
有解决办法吗?客户不能选择忽略失败的重定向。谢谢你的想法。
发布于 2009-08-12 14:47:05
虽然Gumbo's answer's的推理是正确的,但我无法让他的RewriteRule工作。
添加另一个RewriteCond可以做到这一点。下面的代码已经过测试,运行良好。
RewriteCond %{REQUEST_URI} /nl/index.php$
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301]
发布于 2009-11-06 14:37:17
同意秋葵和马提金的答案...但是:
在Martijn的拼写错误中,应该有"^“来开始REQUEST_URI条件的正则表达式:
RewriteCond %{REQUEST_URI} ^/nl/index.php$
我也只能让Martijn的,而不是Gumbo的,在我的.htaccess文件所在的地方工作。
此外,如果您不希望在重写时传递参数字符串,则应添加"?“在URL的末尾:
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301]
否则,在Martijn的代码后面,它是这样的:“如果您的URL是/nl/index.php?mID=24511&subID=0,则重定向到带有301永久重定向标头的http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0,并且不在此URL上处理更多规则”。
这可能是您想要的,也可能不是您想要的,公平地说,作为一般规则,如果参数不被理解,它们将被忽略而不会造成任何损害,所以这可能无关紧要。但是,如果您想要将用户重定向到新页面,并且想要“漂亮的URL”,那么剥离参数字符串是更可取的,所以将"?“在目标URL的末尾。
https://stackoverflow.com/questions/1260632
复制相似问题