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

浏览器URL末尾出现.html的原因、去除方法及href链接设置

解决URL带.html后缀的问题:原因、去除方法与链接规范

一、为什么除首页外的页面都带.html后缀?

这是静态站点部署到虚拟主机时的常见现象,主要有这几个核心原因:

  • 你的页面本身就是静态.html文件,虚拟主机默认会直接暴露文件的真实扩展名,访问时自然会显示后缀
  • 服务器(比如Apache/Nginx)没开启URL重写功能,无法把无后缀的请求映射到对应的.html文件
  • 你在制作页面时,href链接直接写了带.html的路径,用户点击后URL就会显示完整后缀

二、怎么去除.html后缀?

根据你用的服务器类型,分两种情况处理:

Apache服务器(大部分虚拟主机默认用这个)

在网站根目录创建或编辑.htaccess文件,添加以下重写规则:

# 开启URL重写引擎
RewriteEngine On

# 让无后缀的请求自动匹配对应的.html文件
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

# 可选:把旧的带.html的URL301跳转到无后缀版本,利于SEO和用户体验
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.html
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

⚠️ 提醒:如果规则没生效,先联系主机商确认是否开启了mod_rewrite模块,以及是否允许使用.htaccess

Nginx服务器

找到你的站点配置文件(通常在/etc/nginx/sites-available/目录,或者主机面板的站点设置里),添加以下配置:

server {
    # 保留你原有的server配置(比如listen、server_name、root等)

    # 处理无后缀请求,自动匹配.html文件
    location / {
        try_files $uri $uri.html $uri/ =404;
    }

    # 可选:将带.html的URL永久跳转到无后缀版本
    location ~* \.html$ {
        rewrite ^(.*)\.html$ $1 permanent;
    }
}

修改后重启Nginx:sudo systemctl restart nginx

静态生成器的特殊情况

如果你的网站是用Hexo、Jekyll这类工具生成的,直接在配置文件里修改permalink参数就行:

  • 比如Hexo里把permalink: :year/:month/:day/:title.html改成permalink: :year/:month/:day/:title/
  • Jekyll里把permalink: /:categories/:year/:month/:day/:title.html改成permalink: /:categories/:year/:month/:day/:title/
    改完重新生成站点文件,再上传到虚拟主机就OK了。

三、去除后缀后怎么链接页面?

非常简单,把原来带.html的链接改成无后缀的路径即可:

  • 原来的写法:<a href="about.html">关于我们</a>
  • 修改后:<a href="about">关于我们</a>
    或者用根路径开头的写法(更稳妥,避免相对路径出错):<a href="/about">关于我们</a>

如果全站有大量链接要改,直接用编辑器的批量替换功能,把所有.html"替换成"就行,注意别误替换掉代码里其他地方的.html字符串哦。

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

火山引擎 最新活动