我的网络服务器上有很多网站。
我只想在网址正好/?
例如:
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]
答案 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]