我在Ubuntu中使用Apache2作为web服务器,我的根目录是/var/www/html。在那里我有一个带有的.htaccess文件
RewriteEngine on
ErrorDocument 404 /custom404.html
这很管用。当我访问mydomain.com/arandomstring时,我会看到custom404.html页面。然而,我想做的是阻止对custom404.html的直接访问,比如domain.com/custom404html应该不起作用。我将如何实现这一点?我已经广泛搜索了StackOverflow,但在这方面没有找到任何帮助。
您不能简单地阻止所有访问,因为需要访问自定义错误文档才能提供服务。
但是,您可以通过检查REDIRECT_STATUS
环境变量来阻止直接访问,该变量在初始请求时为空,并在发生错误时设置为HTTP状态代码(例如,在404未找到的情况下为"404"(。
例如,在.htaccess
:中使用mod_rewrite
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^custom404.html$ - [F]
当直接请求/custom404.html
时,这服务于403禁止。或者将F
更改为R=404
以服务404未找到(而不触发重写循环(。
更新:如果在服务器(或虚拟主机(上下文中使用,则需要在RewriteRule
模式上使用斜杠前缀。例如:RewriteRule ^/custom404.html$ - [F]
<Location /custom404.html> RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteRule .* - [R=404] </Location>
这样写(下面的代码(会更简单(而且效率略高((不需要<Location>
包装器(:
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^/custom404.html$ - [R=404]