使用htaccess移除.html后缀后,带尾斜杠的URL触发404错误如何解决?
解决方案
一、修改.htaccess配置解决尾斜杠触发404的问题
替换现有.htaccess代码为以下内容,各规则作用会逐段说明:
# 开启重写引擎 RewriteEngine On # 1. 合并处理www跳转+HTTPS强制跳转 RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC,OR] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301,NE] # 提示:首次配置建议先用R=302测试,确认跳转正常后再改为301 # 2. 移除URL末尾的尾斜杠(根目录/除外) RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301,NE] # 3. 重写无扩展名/带尾斜杠的请求到对应HTML文件 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*?)/?$ $1.html [NC,L] # 4. 自定义404错误页面 ErrorDocument 404 /page-not-found.html
二、修复自定义404页面的相对链接异常问题
当用户访问domain.xyz/old/page/这类不存在的深层路径时,404页面的相对资源链接会以当前错误路径为基准加载,导致CSS、JS等文件找不到。可通过以下两种方法解决:
- 方法1:在404页面添加
标签
在page-not-found.html的<head>标签内添加:
<base href="https://domain.xyz/" />
这会让页面内所有相对链接都以网站根目录为基准加载。
- 方法2:将404页面的资源引用改为绝对路径
把所有相对路径的资源引用改成根目录开头的绝对路径,比如将css/error.css改为/css/error.css,images/404-bg.jpg改为/images/404-bg.jpg。
规则细节说明
- 合并www+HTTPS规则:同时处理www域名跳转和HTTP转HTTPS,减少规则数量提升执行效率,
%1对应匹配到的非www域名部分,NE参数避免URL特殊字符被编码。 - 移除尾斜杠:对非真实目录的带尾斜杠请求,301跳转到不带斜杠的标准URL,让旧站带斜杠的链接统一指向新站规范地址,避免重复内容和404。
- HTML扩展名重写:调整规则同时支持带/不带尾斜杠的请求,都会映射到对应的
.html文件,覆盖所有可能的访问场景。 - 404配置:保持原有自定义错误页配置,配合
标签或绝对路径解决资源加载异常。
内容的提问来源于stack exchange,提问作者Exito
相关产品推荐
相关产品推荐

