.htaccess禁止bot仅在带有参数的url上

6pp0gazn  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(104)

Google正在访问带有参数的页面,我需要阻止它。
在所有带有参数的页面上给予404页,类似于site.com?q=text或site.com/?q=text
但不阻止,如果链接只是site.com
我为.htaccess写了这个脚本

ErrorDocument 403 "Your connection was rejected"
ErrorDocument 404 /404.shtml

RewriteEngine On
#RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_USER_AGENT} (Googlebot) [NC]
RewriteCond %{REQUEST_URI} ^/q= [NC]
RewriteRule ^ - [F,L]

字符串
但有2个问题首先-如何设置参数
第二-当他们阻止不显示404页面和显示

Not Found
The requested URL was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.


但是我给予ErrorDocument 404 /404.shtml。为什么Apache找不到404.shtml?如果我给予一个缺失的页面,它会正常显示为404.shtml。

ct2axkht

ct2axkht1#

首先,您需要使用QUERY_STRING而不是REQUEST_URI来匹配查询字符串。
此外,你会得到这个错误,因为查询字符串没有在重定向的URL中获得,即。404重定向后的/404.shtml?q=text,您的规则将再次尝试重定向到相同的URL。
理想情况下,您应该像这样返回403 forbidden:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} (Googlebot) [NC]
RewriteCond %{QUERY_STRING} ^q= [NC]
RewriteRule ^ - [F]

字符串
但是,如果你必须使用404,那么就像这样使用它:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} (Googlebot) [NC]
RewriteCond %{QUERY_STRING} ^q= [NC]
RewriteRule !^404\.shtml$ - [R=404,NC,L]


它将对除/404.shtml之外的所有URL执行此规则。
您也可以像这样检查REDIRECT_STATUS

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_USER_AGENT} (Googlebot) [NC]
RewriteCond %{QUERY_STRING} ^q= [NC]
RewriteRule ^ - [R=404,L]


这将仅对原始URL执行此规则。

相关问题