我尝试了多种尝试使用根目录上的查询字符串重定向某些网址的方法,例如,如果我尝试匹配网址!inbound
http://example.com/?bloginfo=racing
或
Redirect 301 "/?bloginfo=racing" http://example.com/racing
条件永远不会匹配。我的RedirectMatch 301 ^/?bloginfo=racing$ http://example.com/racing
文件内部有一个很好的方法来编写这种重定向吗?
答案 0 :(得分:3)
如果要匹配查询字符串,则需要使用mod_rewrite并检查RewriteCond
指令中的QUERY_STRING服务器变量。 mod_alias指令(即。Redirect
和RedirectMatch
仅匹配URL路径,而不匹配查询字符串。)
例如,要将http://example.com/?bloginfo=racing
重定向到http://example.com/racing
,您可以执行以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^bloginfo=racing$
RewriteRule ^$ /racing? [R=302,L]
替换上的尾随?
是从请求中删除查询字符串所必需的,否则会将其传递到目标网址。或者,使用Apache 2.4 +上的QSD
标志
将302(临时)更改为301(永久),如果这是永久性的,并且只有当您确定它正常工作时(以避免缓存问题)。
要使此更通用并将/?bloginfo=<something>
重定向到/<something>
,您可以执行以下操作:
RewriteCond %{QUERY_STRING} ^bloginfo=([^&]+)
RewriteRule ^$ /%1? [R=302,L]
%1
是对上次匹配 CondPattern 中捕获的子模式的反向引用。
答案 1 :(得分:1)
查询字符串是与Request URI分开的变量,因此您必须执行以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} bloginfo=racing
RewriteRule ^$ /racing [L,R]