完全重定向空查询字符串
Redirect exactly null query string
我的网络服务器上有很多网站。
我只想在 url 正好是 /?
时重定向我的所有网站
例如:
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]
您可以使用以下代码来完成此操作。
RewriteEngine On
RewriteRule ^\?$ http://www.example.com/ [L,R=301]
您将规则定义为以 ?并以该符号结尾。
要重定向空查询字符串(即当 URL 仅以 ?
结尾时),您需要检查 THE_REQUEST
.
RewriteRule
模式与 URL 路径匹配,这明显排除了查询字符串(包括 ?
)。
REQUEST_URI
server 变量也省略了查询字符串和任何尾随 ?
。 (请注意,这与 PHP 中的 $_SERVER['REQUEST_URI']
变量不同,后者 确实 包含完整请求 URL。)
并且 QUERY_STRING
变量为空,无论尾随 ?
是否存在。
因此,为了 删除 (即重定向)URL 末尾的尾随 ?
,您可以执行类似以下:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.+)\?\ HTTP/
RewriteRule ^ %1? [R,L]
RewriteRule
替换 (%1?
) 末尾的尾随 ?
实际上并不存在于结果 URL 中,但为了 完全删除 查询字符串。或者,如果您使用的是 Apache 2.4+,则可以改用 QSD
(查询字符串丢弃)标志:
RewriteRule ^ %1 [R,L,QSD]
我的网络服务器上有很多网站。
我只想在 url 正好是 /?
例如:
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]
您可以使用以下代码来完成此操作。
RewriteEngine On
RewriteRule ^\?$ http://www.example.com/ [L,R=301]
您将规则定义为以 ?并以该符号结尾。
要重定向空查询字符串(即当 URL 仅以 ?
结尾时),您需要检查 THE_REQUEST
.
RewriteRule
模式与 URL 路径匹配,这明显排除了查询字符串(包括 ?
)。
REQUEST_URI
server 变量也省略了查询字符串和任何尾随 ?
。 (请注意,这与 PHP 中的 $_SERVER['REQUEST_URI']
变量不同,后者 确实 包含完整请求 URL。)
并且 QUERY_STRING
变量为空,无论尾随 ?
是否存在。
因此,为了 删除 (即重定向)URL 末尾的尾随 ?
,您可以执行类似以下:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.+)\?\ HTTP/
RewriteRule ^ %1? [R,L]
RewriteRule
替换 (%1?
) 末尾的尾随 ?
实际上并不存在于结果 URL 中,但为了 完全删除 查询字符串。或者,如果您使用的是 Apache 2.4+,则可以改用 QSD
(查询字符串丢弃)标志:
RewriteRule ^ %1 [R,L,QSD]