Mod rewrite mod_重写以重定向带有查询字符串的URL

Mod rewrite mod_重写以重定向带有查询字符串的URL,mod-rewrite,query-string,Mod Rewrite,Query String,我搜索了stackoverflow的所有地方,但似乎没有一个答案适用于这种情况。我的httpd.conf文件中已经有很多可用的mod_重写规则。我最近才发现Google为我的一个未重写URL编制了索引,其中包含一个查询字符串: 我想使用mod_rewrite执行301重定向到此URL: 问题是,在我稍后的重写规则中,第二个URL被重写以将查询变量传递给WordPress。它最终被改写为: 这是正确的功能。到目前为止,我所尝试的一切要么根本不起作用,要么让我陷入无休止的重写循环。这就是我现在

我搜索了stackoverflow的所有地方,但似乎没有一个答案适用于这种情况。我的httpd.conf文件中已经有很多可用的mod_重写规则。我最近才发现Google为我的一个未重写URL编制了索引,其中包含一个查询字符串:

我想使用mod_rewrite执行301重定向到此URL:

问题是,在我稍后的重写规则中,第二个URL被重写以将查询变量传递给WordPress。它最终被改写为:

这是正确的功能。到目前为止,我所尝试的一切要么根本不起作用,要么让我陷入无休止的重写循环。这就是我现在所拥有的,它陷入了一个循环:

RewriteCond %{QUERY_STRING} state=arizona [NC]
RewriteRule .*   http://domain.com/arizona [R=301,L]
#older rewrite rule that passes query string based on URL:
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L]
这给了我一个无休止的重写循环,并将我带到这个URL:

然后我试了一下:

RewriteRule .*   http://domain.com/arizona? [R=301,L]

删除了URL中的查询字符串,但仍然创建了一个循环。

RewriteCond%{REQUEST\u URI}^/\?state=arizona$[NC]

应该是

RewriteCond%{QUERY\u STRING}state=arizona[NC]


请求_uri结束于?令牌。

好的,添加第二个重写秒最终修复了它-现在正确重写,没有循环:

# redirect dynamic URL: ?state=arizona
RewriteCond %{QUERY_STRING} state=arizona [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule .*   http://domain.com/arizona? [R=301,L]
# older rewrite rule that passes query string based on URL:
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L]
以下是使其适用于任何州值的代码,而不仅仅是亚利桑那州:

RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} ^state=([A-Za-z-]+)$ [NC]
RewriteRule .*   http://domain.com/%1? [R=301,L]

您可能需要将
RewriteRule^([\w-]+)$index.php?state=$1[L]
收紧为
RewriteRule^([a-z]+)$index.php?state=$1[L]
。index.php将不匹配,也不会被重定向。“点”字符如何匹配字符类[\w-]?无论如何,我在上面更改了它,但仍然有相同的循环。