.htaccess-R = 404不显示自定义错误页面

时间:2018-12-22 09:19:59

标签: php .htaccess redirect

当用户访问扩展名为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。

2 个答案:

答案 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 文件,因此该条件会阻止创建循环,因为它会检查是否存在对文件的重定向。

抱歉语言不通,但我几乎不会说。

问候