0

我的httpd.conf 文件中已经有很多有效的 mod_rewrite 规则。我最近才发现 Google 已将我的一个未重写的 URL 编入索引,其中包含一个查询字符串:

http://example.com/?state=arizona

我想使用 mod_rewrite 做一个 301 重定向到这个 URL:

http://example.com/arizona

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

http://example.com/index.php?state=arizona

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

RewriteCond %{QUERY_STRING} state=arizona [NC]
RewriteRule .*   http://example.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: http://example.com/arizona?state=arizona

然后我尝试了这个:

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

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

4

2 回答 2

1

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

# 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]
于 2012-12-13T22:31:24.000 回答
0

RewriteCond %{REQUEST_URI} ^/\?state=arizona$ [NC]

应该

RewriteCond %{QUERY_STRING} state=arizona [NC]

request_uri 结束于 ? 令牌。

于 2012-12-12T13:31:00.517 回答