修改.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} !-f和RewriteCond %{REQUEST_FILENAME} !-d:这两个条件用来过滤真实存在的文件(比如图片、CSS、JS)和目录,避免对这些资源进行不必要的重写,只处理那些不存在的路径请求。- 第一组重写规则:先检查请求路径加上
.html后缀后是否为真实存在的文件,如果是,就把无扩展名的URL重写为带.html的版本。[L]标记表示这是最后一条规则,匹配到后就不再往下执行——这就保证了.html文件的优先级。 - 第二组重写规则:只有当上面的.html文件不存在时,才会触发这一步,检查请求路径加
.php后缀是否存在,存在则重写为.php版本。
测试场景验证
比如你访问example.com/about:
- 如果服务器上存在
about.html,会直接加载这个文件; - 如果
about.html不存在,但about.php存在,就会加载about.php; - 如果两个都不存在,就会返回404错误,符合预期。
内容的提问来源于stack exchange,提问作者Mr. B




