【问题标题】:.htaccess rules blocking legitimate traffic.htaccess 规则阻止合法流量
【发布时间】:2014-03-31 16:22:55
【问题描述】:

问题:我网站的合法流量收到“403 Forbidden”错误。

示例:来自用户代理 Twitterbot/1.0 的从 199.16.156.125GET /robots.txt HTTP/1.1 的请求应该被允许,但被拒绝。

怀疑罪魁祸首:我的根 .htaccess 文件实现了 PerishablePress 的 5G 防火墙;来自各种 WordPress 安全插件的附加拒绝规则;我自己编写的一些拒绝规则;以及一长串被禁止的 CIDR。

示例代码(截断):

# ban all requests via HTTP/1.0
# UNLESS they are requests to either wp-cron or admin-ajax.
<ifModule mod_rewrite.c>
RewriteCond %{THE_REQUEST} !(HTTP/1\.1)$ [NC]
RewriteCond %{REQUEST_URI} !^(/wp-admin/admin-ajax\.php.*|/wp-cron\.php.*)
RewriteRule ^(.*)$ - [F,L]
</ifModule>

# 5G:[USER AGENTS]
<IfModule mod_setenvif.c>
 SetEnvIfNoCase User-Agent ^$ keep_out
 SetEnvIfNoCase User-Agent (casper|cmsworldmap|diavol|dotbot)   keep_out
 SetEnvIfNoCase User-Agent (flicky|ia_archiver|kmccrew) keep_out
 SetEnvIfNoCase User-Agent (libwww|planetwork|pycurl|skygrid)   keep_out
 SetEnvIfNoCase User-Agent  (SISTRIX|AhrefsBot|YandexBot|Baidu|SiteExplorer|MJ12bot|Browserlet|msnbot\-media) keep_out
 SetEnvIfNoCase User-Agent (Java|Wget|CPython|ruby|panscient\.com) keep_out
 <Limit GET POST PUT>
  Order Allow,Deny
  Allow from all
  Deny from env=keep_out
 </Limit>
</IfModule>

#allowed IP (example)
allow from 255.255.255.255

#banned networks
deny from 199.119.224.0/22
deny from 199.30.48.0/21
deny from 99.198.96.0/19

还有更多,但我怀疑问题可能出在上面的示例代码中。

我尝试了什么: 1. 编辑 .htaccess 规则以尝试解决问题。 2. 创建 403 记录器脚本以提供有关收到 403 响应的请求的其他详细信息。 (假设是被禁止的请求可能包含额外的 X-Forwarded-For 标头,其中包含来自被禁止网络的 IP 地址;但是,事实证明这个假设是不正确的。) 3. 用头撞桌子。

编辑

如果普遍认为发布的 sn-p 不会导致我所描述的问题,我将接受一个答案,以帮助我通过更有效的故障排除来追踪问题的实际原因。

更新

我感谢社区的意见,并认为我会提供更新。

最后,我联系了我的网络主机寻求帮助。经过一番反复讨论,我得知我的主机确实禁止 Twitterbot 从他们的网络中使用,因为它是一个资源占用者,显然是通过访问运行优化不佳的 WordPress 插件的网站。所以这个具体结果毕竟不是 .htaccess 问题。

但是,我仍然有一个客户无法访问我的网站,而是收到 403 禁止消息:合法流量被拒绝,如上所述。我的主机确认他们没有阻止我客户的 IP 地址。我还没有找到解决这个问题的方法。我什至在我的“拒绝”指令列表之前的“允许”指令中列出了他的专用 IP,但他仍然被拒绝。我编辑了上面的代码示例进行演示。

【问题讨论】:

  • 你确定你没有在底部被禁止的网络中禁止他们吗?你没有把它们都展示出来。你把它截断了。
  • 禁止网络列表按顺序排列,从(理论上)1.0.0.0/8 到 99.0.0.0/8,因此应该很容易直观地识别给定 IP 是否在禁止网络。所以我认为这不是问题。这是一个有效的问题。如果您认为有帮助,我可以发布整个被禁网络列表。
  • 我问的原因是因为你有一些 199.x.x.x 子网,你可能包括在其中之一。您的 199.x.x.x 禁止网络是什么?
  • 只是我列出的那些。该部分内容为:拒绝来自 198.143.128.0/18 拒绝来自 198.147.20.0/22 拒绝来自 198.23.128.0/17 拒绝来自 198.23.150.128/26 拒绝来自 198.27.64.0/18 拒绝来自 198.50.128.0/17 拒绝来自 199.119。 224.0/22 拒绝来自 199.30.48.0/21 拒绝来自 2.0.0.0/8

标签: apache .htaccess


【解决方案1】:

我知道这是不久前发布的,很可能已解决

RewriteCond %{REQUEST_URI} !^(/wp-admin/admin-ajax\.php.*|/wp-cron\.php.*)

如果不是 /wp-admin/admin-ajax.php 或 /wp-cron.php 将被禁止 因此 /robots.txt 将失败,因为它属于 NOT 所代表的范围内!

【讨论】:

    猜你喜欢
    • 2023-02-01
    • 1970-01-01
    • 2014-10-18
    • 2023-01-12
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2013-10-05
    相关资源
    最近更新 更多