我在/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
答案 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
.php
个文件的所有请求都会重定向到/errors/404.php
脚本。/errors/404.php
脚本(在这种情况下适用ErrorDocument 404 /errors/404.php
指令)。/errors/404.php
的所有直接请求都会返回403 Forbidden状态代码。