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

.htaccess代码无法清理缓存、隐藏HTML后缀,请问哪里存在错误?

.htaccess 规则错误点及修复方案

缓存清理功能失效原因

  • Expires头赋值格式不符合Apache规范,直接填写0属于无效值,浏览器会直接忽略该响应头,无法触发过期清理。
  • Header指令仅使用set参数,仅对200系列正常响应生效,304缓存命中、4xx/5xx异常响应不会携带缓存头,导致部分场景缓存规则不生效。
  • 未限制缓存规则作用范围,全局配置很容易被服务器上层站点配置覆盖。

HTML后缀隐藏功能失效原因

  • 正则规则^([^\.]+)$会拦截所有带点的路径,若站点存在含点的多级目录、带参数的路径都会直接匹配失败,无法触发重写。
  • 仅判断了请求路径不是文件,但未校验对应的.html文件是否真实存在,重写后如果文件不存在会直接返回500内部错误。
  • 未关闭Apache的MultiViews内容协商功能,开启状态下服务器会自动匹配文件后缀,会优先返回带后缀的响应,和重写规则冲突。
  • 没有添加带后缀访问的跳转规则,用户直接访问带.html后缀的地址时不会自动跳转到无后缀路径,达不到隐藏效果。

修正后的完整配置

Options -Indexes +ExecCGI -MultiViews
AddHandler cgi-script .cgi .pl

<IfModule mod_headers.c>
    Header always set Cache-Control "no-cache, no-store, must-revalidate"
    Header always set Pragma "no-cache"
    Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT"
</IfModule>

RewriteEngine On

# 带.html后缀的请求301跳转到无后缀地址
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

# 无后缀请求重写到对应.html文件
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)$ $1.html [NC,L]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:48:00