不允许使用mod_rewrite通过URL访问错误页面

时间:2013-04-11 23:51:19

标签: .htaccess mod-rewrite custom-error-pages

我在/errors/404.php有自定义错误页面,我希望能够在apache找不到文件时使用它,但我希望它不能仅仅通过请求URL来使用http://mywebsite/error/404.php

我目前有一条规则阻止访问我的所有php文件(因为我使用URL重写来制作用户友好的URL)但这似乎也阻止了apache读取错误页面,因为错误页面与规则拒绝访问php文件。

我该如何正确地做到这一点?

/.htaccess的内容:

RewriteEngine On
RewriteRule ^home/?$       /index.php   [NC,L]
RewriteRule ^lessons/?$    /lessons.php [NC,L]

# Don't allow access to the actual php files.
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC]
RewriteRule ^.*$           -                  [R=404,L]

ErrorDocument 404 /errors/404.php

1 个答案:

答案 0 :(得分:1)

您可以尝试这样做:

# Don't allow access to the actual php files.
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/  [NC]
RewriteCond %{REQUEST_URI}  !/errors/404\.php  [NC]
RewriteRule ^.*$  -        [R=404,L]

RewriteCond %{THE_REQUEST} \s/errors/404\.php [NC]
RewriteRule .?  -  [F]

ErrorDocument 404 /errors/404.php
  1. .php个文件的所有请求都会重定向到/errors/404.php脚本。
  2. 对不存在的文件或目录的所有请求都被重定向到/errors/404.php脚本(在这种情况下适用ErrorDocument 404 /errors/404.php指令)。
  3. /errors/404.php的所有直接请求都会返回403 Forbidden状态代码。