【发布时间】:2020-07-08 20:37:23
【问题描述】:
在 Apache 中,我有一个有效的 .htaccess 文件,该文件将 .php 扩展名附加到请求的网站页面,例如: https://{{domain}}/sales -> 提供来自 https:/ 的内容/{{domain}}/sales.php 而对于访问者来说,它看起来像 https://{{domain}}/sales
它运行完美。
但是,我无法解决如何也使用服务器上花哨的 404.php 页面。
这是我当前的 .htaccess 文件内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1\.php [NC,L]
证据:如果我关闭我的 .htaccess 文件(重命名它),404 页面根据我的 httpd.conf 设置运行良好。所以,我几乎可以肯定,正是这个不成熟的 .htaccess 文件阻止了我在找不到 sales.php 页面时提供精美的 404 页面。
httpd.conf 中的具体行是什么:
DocumentRoot "/var/www/html/"
ErrorDocument 404 "/404.php"
此外,我已经尝试了以下每个:(并在之后重新加载了 httpd)
ErrorDocument 404 "/var/www/html/{{virtualHostDir}}/404.php"
ErrorDocument 404 "/404.php"
ErrorDocument 404 "404.php"
我什至尝试将 ErrorDocument 直接添加到 virtualHost 设置中,但无济于事。
当您收到 404 并且 .htaccess 文件就位时,实际会发生什么?
我得到一个没有 html 的页面,它只是说“找不到文件”。
【问题讨论】:
-
您的自定义 404 是如何以及在哪里定义的?
-
自定义 404 页面位于网站的根目录(与 .htaccess 文件位于同一位置)。如果没有覆盖 .htaccess 文件的内容,Apache 的 httpd.conf ErrorDocument 404 "{{location}}" 会在页面丢失时正确调用 404。感谢您的帮助。
-
"{{location}}"到底是什么? (“错误”可能仍然在于ErrorDocument的定义方式,尽管它在其他情况下似乎工作正常。如果它是完整的文档根相对文件系统路径,那么它不应该与发布的 mod_rewrite 指令冲突。)当你得到一个 404 并且.htaccess文件就位时,实际上会发生什么?确切的反应是……?如果尝试提供自定义错误文档时出现错误,默认的 Apache 响应通常会为您提供线索... 404、500 等? -
DocumentRoot "/var/www/html/"ErrorDocument 404 "/404.php"这些是我从 httpd.conf 中获取的行当你得到一个 404 并且 .htaccess 文件就位时实际会发生什么 我得到一个没有 html 的页面,它只会显示“找不到文件”。 (OP 更新了这些细节)再次感谢您的详细帮助! -
"/var/www/html/**{{virtualHostDir}}**/404.php" - 刚刚注意到这一点......为什么你似乎会引入另一个子目录(在 vHost 中)该文件似乎位于
/var/www/html/404.php?
标签: php apache .htaccess errordocument