首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Apache Redirect 301在使用GET参数时失败,例如?blah=

Apache Redirect 301在使用GET参数时失败,例如?blah=
EN

Stack Overflow用户
提问于 2009-08-11 14:12:49
回答 2查看 30.6K关注 0票数 19

我已经为客户建立了一个新的PHP网站,并希望将排名靠前的谷歌结果从旧的网站结构重定向到新的网站结构。

我已经在文档根目录的.htaccess中放置了几十个重定向301,虽然有些工作正常,但我遇到了许多其他的问题。

这可以很好地工作:

代码语言:javascript
复制
Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152

这不管用!(导致404,因为跳过了重定向):

代码语言:javascript
复制
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参数的重定向似乎失败。

有解决办法吗?客户不能选择忽略失败的重定向。谢谢你的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-12 14:47:05

虽然Gumbo's answer's的推理是正确的,但我无法让他的RewriteRule工作。

添加另一个RewriteCond可以做到这一点。下面的代码已经过测试,运行良好。

代码语言:javascript
复制
RewriteCond %{REQUEST_URI} /nl/index.php$
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301]
票数 18
EN

Stack Overflow用户

发布于 2009-11-06 14:37:17

同意秋葵和马提金的答案...但是:

在Martijn的拼写错误中,应该有"^“来开始REQUEST_URI条件的正则表达式:

代码语言:javascript
复制
RewriteCond %{REQUEST_URI} ^/nl/index.php$

我也只能让Martijn的,而不是Gumbo的,在我的.htaccess文件所在的地方工作。

此外,如果您不希望在重写时传递参数字符串,则应添加"?“在URL的末尾:

代码语言:javascript
复制
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的末尾。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1260632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档