301重定向根目录上的查询字符串?

时间:2017-08-21 13:53:38

标签: apache .htaccess redirect mod-rewrite mod-alias

我尝试了多种尝试使用根目录上的查询字符串重定向某些网址的方法,例如,如果我尝试匹配网址!inbound

http://example.com/?bloginfo=racing

Redirect 301 "/?bloginfo=racing" http://example.com/racing

条件永远不会匹配。我的RedirectMatch 301 ^/?bloginfo=racing$ http://example.com/racing 文件内部有一个很好的方法来编写这种重定向吗?

2 个答案:

答案 0 :(得分:3)

如果要匹配查询字符串,则需要使用mod_rewrite并检查RewriteCond指令中的QUERY_STRING服务器变量。 mod_alias指令(即。RedirectRedirectMatch仅匹配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]