如何拒绝查询字符串以主题标签开头的 URL?
How to reject URLs whose query string begins with a hashtag?
使用 mod_rewrite,我如何拒绝(通过返回 404)所有 QUERY_STRING
以井号标签 (#
) 开头的 URL?比如这些网址都是我要拒绝的例子:
https://example.com/?#something
https://example.com/?#anything-else
https://example.com/?#i-don't-care-about-this-text
但是如果 ?
之后的字符串以其他任何内容开头,或者根本没有查询字符串,我希望它通过。
我知道主题标签是一个片段标识符,并且主题标签后面的字符串不是您可以使用 mod_rewrite 处理的内容,但我希望主题标签本身会显示出来。所以我试过像这样匹配的规则:
RewriteCond %{QUERY_STRING} #
RewriteCond %{QUERY_STRING} "#"
RewriteCond %{QUERY_STRING} (#)
RewriteCond %{QUERY_STRING} -n
RewriteCond %{QUERY_STRING} ^$
但其中 none 似乎能捕捉到它。您能否建议一种方法来检测和拒绝 QUERY_STRING
以井号标签开头的网址?
更新:但是如果请求 https://example.com
(没有 ?
),它应该通过。
我尝试过的另一个想法是:
RewriteCond %{REQUEST_URI} ^\/\?$
RewriteCond %{QUERY_STRING} =""
RewriteRule ^ - [L,R=404]
我想在这里做的是说:如果 REQUEST_URI
包含一个 ?
并且如果 QUERY_STRING
为空,则重定向到 404。但它重定向所有内容(包括具有非空 query_strings) 到 404.
的 URL
您可以尝试使用此规则来检测没有查询字符串的 ?
:
RewriteEngine On
RewriteCond %{THE_REQUEST} \?\s
RewriteRule ^$ - [L,R=404]
使用 mod_rewrite,我如何拒绝(通过返回 404)所有 QUERY_STRING
以井号标签 (#
) 开头的 URL?比如这些网址都是我要拒绝的例子:
https://example.com/?#something
https://example.com/?#anything-else
https://example.com/?#i-don't-care-about-this-text
但是如果 ?
之后的字符串以其他任何内容开头,或者根本没有查询字符串,我希望它通过。
我知道主题标签是一个片段标识符,并且主题标签后面的字符串不是您可以使用 mod_rewrite 处理的内容,但我希望主题标签本身会显示出来。所以我试过像这样匹配的规则:
RewriteCond %{QUERY_STRING} #
RewriteCond %{QUERY_STRING} "#"
RewriteCond %{QUERY_STRING} (#)
RewriteCond %{QUERY_STRING} -n
RewriteCond %{QUERY_STRING} ^$
但其中 none 似乎能捕捉到它。您能否建议一种方法来检测和拒绝 QUERY_STRING
以井号标签开头的网址?
更新:但是如果请求 https://example.com
(没有 ?
),它应该通过。
我尝试过的另一个想法是:
RewriteCond %{REQUEST_URI} ^\/\?$
RewriteCond %{QUERY_STRING} =""
RewriteRule ^ - [L,R=404]
我想在这里做的是说:如果 REQUEST_URI
包含一个 ?
并且如果 QUERY_STRING
为空,则重定向到 404。但它重定向所有内容(包括具有非空 query_strings) 到 404.
您可以尝试使用此规则来检测没有查询字符串的 ?
:
RewriteEngine On
RewriteCond %{THE_REQUEST} \?\s
RewriteRule ^$ - [L,R=404]