我的 htaccess 重定向匹配不正确的 URL 时出错


Error with my htaccess redirect matching incorrect URL

这是我的htaccess文件中的重定向

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www'.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^project/(.*)$ /service/$1 [R=301,NC,L]
RewriteCond %{QUERY_STRING} name
RewriteRule ^$ /? [R=301,L]
RewriteCond %{QUERY_STRING} p
RewriteRule ^$ /? [R=301,L]

我遇到的问题是它干扰了特定的 url。

而不是得到:

http://www.example.com/wp-admin/admin.php?gf_page=select_columns&id=1&TB_iframe=true&height=365&width=600

我得到:

http://www.example.com/?gf_page=select_columns&id=1&TB_iframe=true&height=365&width=600

我看到 url 参数中有"页面"一词。

我想知道我的重定向是否不完全匹配,因此匹配"页面"一词中的"p"。

RewriteCond %{QUERY_STRING} p

如果这是(事实上)问题所在,我怎样才能使query_string完全匹配?

该重写条件应该只从域的根级别获取与 p 完全匹配的查询字符串。

如果这不是问题所在,还有其他想法吗?

你可以做这样的事情,也可以结合这两个规则。这应该有助于匹配 p。

RewriteEngine on
RewriteCond %{QUERY_STRING} (name|p)=.+
RewriteRule ^$ /? [R=301,L]

在尝试新规则之前清除缓存,因为您设置了以前的 301。