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

如何用.htaccess实现同名文件与文件夹的URL优化及后缀隐藏

解决方案

直接替换你的.htaccess代码为以下内容,就能满足所有需求:

RewriteEngine On
DirectorySlash Off

# 重定向末尾带斜杠的目录请求到无斜杠版本
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)/$ $1 [R=301,L]

# 重写请求到对应的.php文件(优先匹配.php文件,而非同名文件夹)
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]

规则说明

  1. DirectorySlash Off:关闭Apache默认给目录请求自动添加末尾斜杠的行为,避免系统自动跳转干扰自定义规则。
  2. 末尾斜杠重定向:当请求路径是真实存在的目录且末尾带斜杠时(比如example.com/foo/),通过301永久重定向去掉斜杠,跳转到example.com/foo。
  3. PHP文件重写:
    • 先检查请求路径加上.php后缀后是否为真实存在的文件(比如请求example.com/foo时,检查foo.php是否存在)。
    • 如果存在,就将请求内部重写为对应的PHP文件。这条规则同时支持根目录(/foo→foo.php)和子目录(/foo/bar→foo/bar.php)的情况,且因为优先检查PHP文件的存在性,会自动忽略同名文件夹,解决了文件夹优先级的问题。

原代码失效原因

  • 原规则^([^.]+)$仅匹配根目录下无后缀的请求,无法处理/foo/bar这类子目录路径。
  • 未处理同名文件夹的优先级:Apache默认优先访问真实存在的文件夹,原规则没有先检查对应PHP文件是否存在,导致请求/foo时会进入文件夹而非指向foo.php。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:20:40