编程语言
首页 > 编程语言> > php-.htaccess仅当GET参数存在时才重定向

php-.htaccess仅当GET参数存在时才重定向

作者:互联网

我有一个旧网站没有“漂亮” URL的客户.所以目前看起来像这样:

http://www.domain.com/?w=42&a=5&b=3

参数值仅是数字.

现在,他们希望将旧站点移至子域,而主(www)域将成为新站点(具有SEO友好URL的WP)的所在地.

现在,我想做的就是重定向所有到达/?w =< num>的请求. (并且只有那些)到sub.domain.com/?w=\u0026lt;num\u0026gt ;,以便现有链接(大部分来自Google)被重定向到子域页面,而新页面则通过漂亮的URL提供新内容.

我尝试了这个:

# This works, but redirects the entire www.domain.com
# to sub.domain.com no mather what 
RewriteCond %{HTTP_HOST} ^www\.domain\.com$[NC]
RewriteRule ^(.*)$http://sub.domain.com/$1 [R=301,L]

# But this DOESN'T work
RewriteRule   ^/?w(.*)  http://sub.domain.com/?w$1  [R=301,L]

# Also tried to redirect 'by hand', but DIDN'T work either
Redirect 301 /?w=42 http://sub.domain.com/?w=42 

我究竟做错了什么?我搜寻了很多东西,但总是得到这样的建议.或者也许我只是在搜索错误的关键字…

谢谢!

解决方法:

您无法与重写规则或重定向指令中的查询字符串匹配.您需要与%{QUERY_STRING}变量匹配.尝试:

RewriteCond %{QUERY_STRING} (^|&)w=[0-9]+(&|$)
RewriteRule ^(.*)$http://sub.domain.com/$1 [L,R=301]

请注意,查询字符串会自动附加到规则目标的末尾.

标签:apache,redirect,php,htaccess,url-rewriting
来源: https://codeday.me/bug/20191120/2045526.html