如何拒绝查询字符串以主题标签开头的 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]