首页 > 解决方案 > htaccess 错误页面文件不适用于重写条件

问题描述

我已经写了一个条件来自动添加 URL 中的路径,它工作正常,但现在我想添加错误页面,但它没有给出响应,而是给出 500 错误。 带有文本的ErrorDocument工作正常,但它没有添加文件我已经检查了所有可能的路径,但仍然没有响应。

这是我在.htaccess文件中的代码。

<IfModule mod_rewrite.c>

        RewriteEngine On

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /crud/views/pages/$1 [L]
</IfModule>
ErrorDocument 500 /404.html

ErrorDocument 404 /404.html

标签: apache.htaccess

解决方案


   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ /crud/views/pages/$1 [L]

如果您请求的文件(或目录)在前缀时不存在,这将导致重写循环(500 错误)/crud/views/pages/

请注意,对于大多数 500 错误而言,定义 500ErrorDocument为时.htaccess已晚——这ErrorDocument需要在服务器配置的早期定义以捕获此特定错误。

您可以通过在重写之前首先检查所需位置的资源是否存在来解决此重写循环,而不是检查当前请求是否未映射到文件(或目录)。这也只涉及一个文件系统检查,而不是两个。

例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{DOCUMENT_ROOT}/crud/views/pages/$1 -f
RewriteRule (.*) crud/views/pages/$1 [L]

检查环境变量的第一个条件REDIRECT_STATUS只是确保只检查直接请求,而不是规则本身重写的请求。


推荐阅读