RewriteEngine 为 404 页面给出错误 500 内部服务器错误 - apache2

RewriteEngine 为 404 页面给出错误 500 内部服务器错误 - apache2

我想用 apache 中的空内容替换 .html 扩展名。

例如DNS/coffee.htmlDNS/coffee我找到了这个代码。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/?$ $1.html [L]
</IfModule>

它完成了我想要的工作,但事实却并非如此。

它似乎不喜欢404.html错误。每次我打开一个不存在的页面时,它不再显示 404 页面,而是显示 500 内部服务器错误消息:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

请通过 EMAIL 联系服务器管理员,告知他们此错误发生的时间,以及您在发生此错误之前执行的操作。

有关此错误的更多信息可以在服务器错误日志中找到。

此外,尝试使用 ErrorDocument 处理请求时遇到 500 内部服务器错误。Apache/2.4.41 (Ubuntu) 服务器 URL 端口 443

我不知道我应该做什么,谷歌没有给我明智的答案,只有诸如“如何将页面重定向到 404.html”或“如何让每个未转到此 DNS 的链接重新重定向到 404 页面”之类的信息。

这是的代码.htaccess

# ------------------Error Pages--------------------
# 404 NOT FOUND
ErrorDocument 404 /errors/404.html
# -----------------Rem .html and .htm extensions---
 
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/?$ $1.html [L]
</IfModule>

答案1

您的非 HTML 重写规则/errors/404.html对加载产生了负面影响。

这会导致 Apache 不断尝试加载errors/[something].html并最终循环直至出现 500 错误而终止。

404.html由于这里的逻辑不严谨,所以无法加载该页面。

如果有人访问DNS/ddqqweeqewqweewq— 或者其他你知道不起作用的无意义的 URL — 你的规则会告诉服务器尝试加载DNS/ddqqweeqewqweewq.html,然后导致加载错误/errors/404/ddqqweeqewqweewq.html。但实际上并不存在。

RewriteCond尝试添加如上RewriteCond %{REQUEST_FILENAME} !^/errors/所示的URL,RewriteRule如下所示:

# ------------------Error Pages--------------------
# 404 NOT FOUND
ErrorDocument 404 /errors/404.html
# -----------------Rem .html and .htm extensions---

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !^/errors/
    RewriteRule ^([^/]+)/?$ $1.html [L]
</IfModule>

相关内容