apache - 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
解决方案
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
只是确保只检查直接请求,而不是规则本身重写的请求。
推荐阅读
- android - 如何解决Android应用链接验证失败的问题?
- javascript - 即使从 0.1 开始,我如何使代码始终向上取整?
- javascript - 我怎样才能用intellij在javascript中更漂亮的模板文字
- ios - 如何解决这些 CloudKit 后台任务警告
- java - 使用 xml 的复合键的休眠映射
- python - alpine 在安装 python 包时导致错误
- python - 如何加载张量流模型
- r - 身份验证后的 R shinymanager removeTab
- wicket - Wicket 7 网页有时会返回不正确的响应
- docker - DataDog 监控容器卡在重启循环中