.htaccess 仅在 GET 参数存在时重定向
.htaccess redirect only if GET parameter exists
我有一个客户有一个没有 'pretty' 网址的旧网站。所以目前它看起来像这样:
http://www.domain.com/?w=42&a=5&b=3
参数值仅为数字。
现在他们想将旧网站移动到子域,主 (www) 域将成为新网站的所在地(WP 具有 SEO 友好的 URL)。
现在我想做的是将所有到达 /?w=<num>
的请求(并且只有那些)重定向到 sub.domain.com/?w=<num>
,以便现有链接(主要来自 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/ [R=301,L]
# But this DOESN'T work
RewriteRule ^/?w(.*) http://sub.domain.com/?w [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/ [L,R=301]
请注意,查询字符串会自动附加到规则目标的末尾。
仅用于文档:如果您只想在存在 URL 参数时将一个目录(路径)从一个路径重定向到另一个路径,同时保持 URL 参数,您可以在您的 htaccess 文件中使用它:
# /programs/?id=1 to new path /loadprog/?id=1
RewriteCond %{REQUEST_URI} ^/programs/
RewriteCond %{QUERY_STRING} id=
RewriteRule ^programs\/$ /loadprog/ [R=301,L]
我相信这会对其他人有所帮助,因为我在试图找到这个答案时偶然发现了上述问题。
我有一个客户有一个没有 'pretty' 网址的旧网站。所以目前它看起来像这样:
http://www.domain.com/?w=42&a=5&b=3
参数值仅为数字。
现在他们想将旧网站移动到子域,主 (www) 域将成为新网站的所在地(WP 具有 SEO 友好的 URL)。
现在我想做的是将所有到达 /?w=<num>
的请求(并且只有那些)重定向到 sub.domain.com/?w=<num>
,以便现有链接(主要来自 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/ [R=301,L]
# But this DOESN'T work
RewriteRule ^/?w(.*) http://sub.domain.com/?w [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/ [L,R=301]
请注意,查询字符串会自动附加到规则目标的末尾。
仅用于文档:如果您只想在存在 URL 参数时将一个目录(路径)从一个路径重定向到另一个路径,同时保持 URL 参数,您可以在您的 htaccess 文件中使用它:
# /programs/?id=1 to new path /loadprog/?id=1
RewriteCond %{REQUEST_URI} ^/programs/
RewriteCond %{QUERY_STRING} id=
RewriteRule ^programs\/$ /loadprog/ [R=301,L]
我相信这会对其他人有所帮助,因为我在试图找到这个答案时偶然发现了上述问题。