如何在禁止所有其他页面的情况下允许403页面?

时间:2016-12-11 23:41:24

标签: .htaccess

我想知道如何允许一个页面成为403页面而其他页面被禁止。这是我在我的.htaccess文件中尝试的但它没有用 - 它没有显示我使用ErrorDocument设置的403页。

ErrorDocument 404 /404.php
ErrorDocument 403 /403.php

Order deny,allow
Deny from all
Allow from 203.0.113.111

1 个答案:

答案 0 :(得分:1)

您可以使用<Files>指令(稍后处理)指定允许的文件。例如:

Order Deny,Allow
Deny from all
Allow from 203.0.113.111
<Files "403.php">
    Allow from all
</Files>

要指定两个错误文档,可以使用带有正则表达式的<FilesMatch>指令:

<FilesMatch "^40[34]\.php$">
    Allow from all
</FilesMatch>

或者,您可以使用否定前瞻将阻止指令仅应用于无错误文档。例如:

<FilesMatch "^(?!40[34]\.php$).*$">
    Order Deny,Allow
    Deny from all
    Allow from 203.0.113.111
</FilesMatch>

另见anubhava对这个问题的回答:
htaccess regex for all except some filetypes

另一种方法是使用mod_rewrite而不是mod_authz_host

例如:

ErrorDocument 404 /404.php
ErrorDocument 403 /403.php

RewriteEngine On

# Exception for error documents
RewriteRule ^40[34]\.php$ - [L]

# Forbid all other requests, except those from IP address
RewriteCond %{REMOTE_ADDR} !=203.0.113.111
RewriteRule ^ - [F]