我想在Apache 2.2的.htaccess文件中为一组特定的RewriteCond制作一条特定的403消息(或页面)。我从来没有见过这样做,但似乎应该是可能的。
我的.htaccess访问文件的相关部分如下所示:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Baiduspider.* [NC]
RewriteRule .* - [F]
正如您所看到的,如果用户代理与我的RewriteCond匹配,我只是阻止他们访问。
更多细节
这非常适合阻止有问题的机器人,但我们遇到了一个有点恼人的问题。许多技术人员都可以访问我们的网站。他们自己做了很多编程,并且经常使用浏览器插件,例如" User Agent Switcher"。
我希望在此特定实例中提供更有意义的消息。这样他们就知道要改变用户代理切换器"到普通的浏览器。我不想只提供正常的403页面,而是希望在这里发布一条更友好的消息。
我知道我可以将它传递给我们的脚本引擎,拉出用户代理并传递自定义标头,但似乎这可能有更优雅的.htaccess解决方案。
答案 0 :(得分:2)
那么......为什么不直接重定向到自定义403文件?在那个html文件中你放了你想要的东西。机器人也会一直被送到那里。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Baiduspider.* [NC]
RewriteCond %{REQUEST_URI} !^/errorpages/403.html [NC]
RewriteRule ^.* /errorpages/403.html [R,L]
答案 1 :(得分:1)
假设您有一个自定义 403错误页面,您可以在错误页面中检查相同的用户代理并显示相应的响应。或者,在.htaccess中设置特定的环境变量(例如SPECIAL_ERROR
)并在错误页面中检查这一点。例如:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Baiduspider.* [NC]
RewriteRule .* - [F,E=SPECIAL_ERROR:1]
这避免了"重定向"往返。
然后,在403错误页面中...(PHP示例):
if (getenv('SPECIAL_ERROR')) {
// friendly error
} else {
// Default 403
}