完全重定向空查询字符串

时间:2015-04-21 16:47:39

标签: apache .htaccess httpd.conf

我的网络服务器上有很多网站。

我只想在网址正好/?

时重定向我的所有网站

例如:

  • www.example1.com/?
  • www.example2.com/?

但不喜欢www.example.com/x.php?www.example.com/或其他任何内容。

我尝试过很多事但却失败了:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^ %{REQUEST_URI}?_test [L,R=302]

RewriteCond %{QUERY_STRING} ^\?$
RewriteRule  ^ http://www.example.com [L,R=301]

RewriteCond %{REQUEST_URI} =="/?"
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码执行此操作。

RewriteEngine On
RewriteRule ^\?$ http://www.example.com/ [L,R=301]

您将规则定义为以?开头?并以那个标志结束。

答案 1 :(得分:0)

要重定向空查询字符串(例如,当网址仅以?结尾时),您需要检查THE_REQUEST

RewriteRule模式与URL路径匹配,特别是排除了查询字符串(包括?)。

REQUEST_URI 服务器变量也省略了查询字符串和任何尾随?。 (请注意,这与PHP中的$_SERVER['REQUEST_URI']变量不同, 包含完整的请求URL。)

QUERY_STRING变量为空,无论是否存在尾随?

因此,为了从URL末尾删除(即重定向)尾随?,您可以执行以下操作:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.+)\?\ HTTP/
RewriteRule ^ %1? [R,L]

?替换(RewriteRule)末尾的结尾%1?实际上并不存在于结果网址中,但是为了删除完全查询字符串。或者,如果您使用的是Apache 2.4+,则可以使用QSD(查询字符串放弃)标志:

RewriteRule ^ %1 [R,L,QSD]