我正在尝试使用 PHP 文件在 Apache 中设置 403 错误文档,如下所示(通过 .htaccess):
order deny,allow
deny from all
allow from [MY_IP]
ErrorDocument 403 /err403.php
但它不起作用,它显示 apache 默认 403 错误,但如果我使用 .html 错误文档,它就会起作用,如下所示:
order deny,allow
deny from all
allow from [MY_IP]
ErrorDocument 403 /err403.html
然后它显示带有错误页面的定制的 HTML 文档。我正在使用 SuPHP。以及 Ubuntu 14.04 Server 存储库中的 apache 和 php。
如果我从.htaccess中删除此限制,则文件err403.php就可以正常读取。
有什么想法吗?谢谢!!
编辑:即,将允许从 ip 更改为另一个 ip,以便触发错误。
答案1
您需要将 err403.php 放在用户(或在您的情况下为 IP)有权访问的目录中。
否则 apache 无法提供该页面并默认返回标准 403 错误页面。
还要确保(当您使用带有 apache 2.4 的 ubuntu 14.04 时)使用“require”更改访问配置。 order、allow、denied 指令已弃用。
完整示例:
ErrorDocument 403 /path/accessible/to/all/err403.php
<Directory /path/your/website/>
Require ip [your_ip]
</Directory>
答案2
除了通过 rechengehirn 回复之外,还可以将文件放在自己的受限文件夹中,只允许错误文件。
order deny,allow
deny from all
allow from [MY_IP]
<Files "err403.php">
allow from all
</Files>
ErrorDocument 403 /err403.php
答案3
我今天为此挣扎了很长时间,直到我使用了 FQDN 才奏效:
<VirtualHost *:80>
ServerName myServer.rad.awesome.com
ServerAlias myServer.rad
Alias /static/ /my/Doc/Root
<Directory /my/Doc/Root/static>
Options All
AllowOverride All
ErrorDocument 403 "http://myServer.rad.awesome.com/youNoEnter.html"
order deny,allow
Deny from all
allow from (MY IP)
satisfy any
</Directory>
</VirtualHost>
只需将您的 ErrorDocument 放在绝对 URL 中就可以了。