如何阻止在Apache中直接访问我的自定义404页面



我在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]

相关内容

  • 没有找到相关文章

最新更新