特定RewriteCond的自定义403页面

时间:2015-09-25 21:02:25

标签: apache .htaccess

我想在Apache 2.2的.htaccess文件中为一组特定的RewriteCond制作一条特定的403消息(或页面)。我从来没有见过这样做,但似乎应该是可能的。

我的.htaccess访问文件的相关部分如下所示:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Baiduspider.* [NC]
RewriteRule .* - [F]

正如您所看到的,如果用户代理与我的RewriteCond匹配,我只是阻止他们访问。

更多细节

这非常适合阻止有问题的机器人,但我们遇到了一个有点恼人的问题。许多技术人员都可以访问我们的网站。他们自己做了很多编程,并且经常使用浏览器插件,例如" User Agent Switcher"。

我希望在此特定实例中提供更有意义的消息。这样他们就知道要改变用户代理切换器"到普通的浏览器。我不想只提供正常的403页面,而是希望在这里发布一条更友好的消息。

我知道我可以将它传递给我们的脚本引擎,拉出用户代理并传递自定义标头,但似乎这可能有更优雅的.htaccess解决方案。

2 个答案:

答案 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
}