【问题标题】:.htaccess - R=404 NOT Showing Custom Error Page.htaccess - R=404 不显示自定义错误页面
【发布时间】:2018-12-22 09:19:59
【问题描述】:

当用户访问带有.php 扩展名的php 文件时,我想显示错误页面。但这没有显示我设置的自定义错误页面。而是显示默认的 Apache 错误页面。

# 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

编辑:我知道我可以使用RewriteRule .* /error [L,R],但我想显示错误页面并保持相同的 URL。例如,如果用户访问/login.php,他必须停留在/login.php,但这会重定向到/error.php。

【问题讨论】:

    标签: php .htaccess redirect


    【解决方案1】:

    我没有找到自动触发自定义错误文档的方法。 R=404 标志显然会导致生成 Apache 的默认错误页面。即使PT|passthrough 对错误页面处理也没有影响。
    (在 Apache/2.4.25 (Debian) / Debian 4.9.135-1 (2018-11-11) x86_64 上测试) GNU/Linux)

    一个可行的解决方案是重写错误处理程序文件的路径,而不是执行重定向,但是,这会将状态代码错误地设置为200 .

    RewriteRule  ^   error404.php    [END]
    

    http_response_code()$_SERVER['REDIRECT_STATUS'] 都将是 200 (int / 字符串类型)。您需要在 PHP 中自行设置状态码。

    $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 覆盖。 'REDIRECT_' 前缀由 mod_rewrite 自动添加。

    【讨论】:

      【解决方案2】:

      我迟到了,因为就在今天我遇到了同样的问题并研究了我遇到的另一个问题,我找到了解决这个问题的方法。

      您所要做的就是在规则之前放置一个条件(在您的情况下是第二个条件):

      RewriteCond% {ENV: REDIRECT_STATUS} ^ $
      

      就这些了

      我的代码和你一样的问题如下:

      RewriteCond% {ENV: REDIRECT_STATUS} ^ $
      RewriteRule ^ (. *) \. Php $ - [R = 404, L]
      

      解释是条件阻止创建循环(因此是默认错误)。由于我们将对某个 php 文件的所有直接访问重定向到 404 错误,而 404 错误又是一个 php 文件,因此该条件会阻止创建循环,因为它会检查是否存在对文件的重定向。

      对不起语言,但我几乎不会说。

      问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 2012-05-11
        • 2019-09-14
        • 2018-04-18
        • 2016-04-25
        • 2013-09-16
        相关资源
        最近更新 更多