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

如何配置.htaccess移除PHP后缀且不影响指定子文件夹运行

问题原因

之前配置的重写规则没有对lib目录做路径豁免,全局匹配所有请求追加.php后缀的逻辑会错误作用到lib目录下的资源,要么把lib下的脚本请求错误重写到根目录找文件,要么打乱内部脚本的引用路径,最终导致lib内PHP脚本无法正常运行。

正确配置代码

将以下内容写入站点根目录的.htaccess文件即可,不需要改动lib目录下的任何原有配置:

RewriteEngine On

# 最高优先级:lib目录下所有请求直接跳过后续重写规则,完全保留原有访问逻辑
RewriteRule ^lib/ - [L]

# 可选配置:统一URL格式,将根目录下带.php后缀的访问301跳转到无后缀地址
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([^/]+\.php)$
RewriteCond %{DOCUMENT_ROOT}/%1 -f
RewriteRule ^ /%1 [R=301,L]

# 根目录无后缀请求重写规则:仅匹配根目录单级路径,校验对应php文件存在才转发
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/lib/
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/]+)$ $1.php [L]
规则说明
  • 第一条排除规则是解决lib目录失效的核心:只要请求路径以lib/开头,就直接终止重写流程,不管是直接访问lib下的脚本,还是根目录页面通过include/require引入lib下的文件,都不会被重写规则干扰
  • 可选的301跳转规则配置后,用户访问/home.php会自动跳转到/home,避免同一个页面出现两个可访问地址,配置后需要清空浏览器缓存再测试,避免旧缓存影响跳转结果
  • 最后一条重写规则做了多层限制:只匹配根目录下没有子路径的请求、不会处理目录请求、只有对应.php文件真实存在时才做内部重写,不会误改其他子目录或静态资源的访问逻辑
校验方法

配置完成后做两项测试即可确认生效:

  • 访问根目录下的页面,比如原地址是/news.php,现在访问/news可以正常打开,访问/news.php会自动跳转到/news(如果开启了可选配置)
  • 访问lib目录下的原有脚本地址,或者触发页面中调用lib脚本的逻辑,返回结果和配置重写前完全一致,不会出现404、403或者代码执行错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:42:35