我的htaccess重定向匹配错误的网址时出错

时间:2016-02-22 00:03:40

标签: php apache .htaccess redirect query-string

以下是我的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]

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

而不是得到:

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参数有单词" page"在它。

我想知道我的重定向是不是完全匹配,因此匹配" p"在单词" page"。

RewriteCond %{QUERY_STRING} p

如果那是(实际上)问题,我怎样才能使query_string完全匹配?

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

如果那不是问题,还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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