You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

修改.htaccess:让干净URL优先加载.html,兼容.php后缀

实现无扩展名URL优先加载.html,再加载.php的.htaccess配置

没问题,我来帮你调整.htaccess规则,实现无扩展名的干净URL优先匹配.html文件,当对应.html不存在时再匹配.php文件的需求。

完整的.htaccess配置代码

# 启用mod_rewrite引擎
RewriteEngine On

# 如果请求的不是真实文件或目录,才进行重写规则匹配
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 优先检查是否存在对应的.html文件,存在则重写为.html后缀
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

# 如果.html文件不存在,检查是否存在对应的.php文件,存在则重写为.php后缀
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

规则详解

  • RewriteEngine On:开启Apache的mod_rewrite模块,这是URL重写的基础,大部分主流主机默认都已启用,如果你是自己搭建的服务器,需要确保该模块已开启。
  • RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d:这两个条件用来过滤真实存在的文件(比如图片、CSS、JS)和目录,避免对这些资源进行不必要的重写,只处理那些不存在的路径请求。
  • 第一组重写规则:先检查请求路径加上.html后缀后是否为真实存在的文件,如果是,就把无扩展名的URL重写为带.html的版本。[L]标记表示这是最后一条规则,匹配到后就不再往下执行——这就保证了.html文件的优先级。
  • 第二组重写规则:只有当上面的.html文件不存在时,才会触发这一步,检查请求路径加.php后缀是否存在,存在则重写为.php版本。

测试场景验证

比如你访问example.com/about

  1. 如果服务器上存在about.html,会直接加载这个文件;
  2. 如果about.html不存在,但about.php存在,就会加载about.php
  3. 如果两个都不存在,就会返回404错误,符合预期。

内容的提问来源于stack exchange,提问作者Mr. B

火山引擎 最新活动