我想用 apache 中的空内容替换 .html 扩展名。
例如DNS/coffee.html
。DNS/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>