You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess配置移除网站所有URL中的.html后缀并保留查询参数

正确移除URL中.html后缀的配置方案

你之前配置失效的核心原因有两个:

  • 单独使用三组配置的任意一组,都只覆盖了一半逻辑:要么只做了带后缀跳转无后缀,没有做无后缀的内部映射;要么只做了内部映射,没有做旧地址跳转
  • 若你测试时返回Nginx目录列表,说明你的站点运行在Nginx服务器上,Nginx原生不支持.htaccess配置,你之前的.htaccess修改完全不会生效,需要直接修改Nginx站点配置文件。

场景1:站点运行在Apache服务器

需要同时配置「带.html后缀地址301跳转到无后缀地址」+「无后缀地址内部映射到对应.html文件」两部分逻辑,完整配置如下:

RewriteEngine On

# 1. 处理带.html后缀的请求301跳转到无后缀地址,自动保留查询参数
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/?(.*)\.html$ /$1 [L,R=301,QSA]

# 2. 处理无后缀的请求,内部映射到对应的.html文件,不改变地址栏URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^/?([^\.]+)$ $1.html [NC,L,QSA]

配置前需确认Apache已经开启mod_rewrite模块,且站点配置中开启了AllowOverride All允许.htaccess生效。


场景2:站点运行在Nginx服务器

直接修改Nginx站点的server配置块,添加以下规则:

# 1. 带.html后缀的请求301跳转到无后缀地址,自动保留查询参数
if ($request_uri ~ ^/(.*)\.html(\?.*)?$) {
    return 301 /$1$is_args$args;
}

# 2. 无后缀请求内部映射到.html文件
location / {
    try_files $uri $uri.html $uri/ =404;
}

修改后重启Nginx即可生效。


注意事项

  • 301跳转是永久跳转,浏览器会长期缓存,测试时请使用浏览器无痕模式,或者每次修改配置后清空浏览器缓存避免旧缓存影响测试结果
  • 若使用Apache,需确认站点目录权限配置正确,.htaccess文件有可读权限

官方文档参考

Apache侧的.htaccess以及rewrite规则,可以直接搜索Apache官方的mod_rewrite模块文档、.htaccess使用指南查看官方规范;Nginx侧的rewrite规则可以搜索Nginx官方ngx_http_rewrite_module文档查看规范。

内容的提问来源于stack exchange,提问作者Pioupia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:27:03