当用户访问扩展名为mc->template MyFunc<false>(a, b);
的php文件时,我想显示错误页面。但这没有显示我设置的自定义错误页面。而是显示默认的Apache错误页面。
.php
编辑:我知道我可以使用# Run Php without filename extension
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
# Return 404 if original request is .php
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]
# Error Pages
ErrorDocument 404 /error.php
ErrorDocument 403 /error.php
,但我想显示错误页面并保持相同的URL。例如,如果用户访问/login.php,则他必须停留在/login.php,但这将重定向到/error.php。
答案 0 :(得分:0)
我没有找到自动触发自定义错误文档的方法。 R=404
标志显然会导致生成Apache的默认错误页面。甚至PT
| passthrough
对错误页面的处理也没有影响。
(在 Apache / 2.4.25(Debian)/ Debian 4.9.135-1(2018- 11-11)x86_64 GNU / Linux )
可行的解决方案是重写错误处理程序文件的路径,而不是执行 redirect ,但是,这会将状态代码错误地设置为{{1 }}。
200
RewriteRule ^ error404.php [END]
和http_response_code()
均为$_SERVER['REDIRECT_STATUS']
(int /字符串类型)。您需要自行在PHP中设置状态代码。
200
如果您打算使用一个包罗万象的错误处理程序,则可以向映射到$previous_status = http_response_code(404);
变量的环境中写入状态。
$_SERVER
在这种情况下,RewriteRule ^ error.php [E=INTENDED_STATUS:404,END]
将是$_SERVER['REDIRECT_INTENDED_STATUS']
。我已经测试过设置404
,但是E=STATUS:404
被$_SERVER['REDIRECT_STATUS']
覆盖了。一个200
前缀由mod_rewrite自动添加。
答案 1 :(得分:0)
我迟到了,因为就在今天我遇到了同样的问题,正在研究我遇到的另一个问题,我找到了这个问题的解决方案。
您所要做的就是在规则之前放置一个条件(在您的情况下是第二个条件):
RewriteCond% {ENV: REDIRECT_STATUS} ^ $
就这些
我的代码与您的相同问题如下:
RewriteCond% {ENV: REDIRECT_STATUS} ^ $
RewriteRule ^ (. *) \. Php $ - [R = 404, L]
解释是条件阻止创建循环(因此是默认错误)。由于我们将对某个 php 文件的所有直接访问重定向到 404 错误,该错误又是一个 php 文件,因此该条件会阻止创建循环,因为它会检查是否存在对文件的重定向。
抱歉语言不通,但我几乎不会说。
问候