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

如何用.htaccess实现同名文件夹与文件的请求响应?

解决.htaccess重写规则适配两个请求的问题

问题原因

当请求info?format=json时,服务器上存在info/目录,Apache的mod_dir模块会自动将请求重定向到info/?format=json(添加末尾斜杠),而原规则会把info/重写成info/.php(不存在的文件),导致404。同时原规则未优先处理“目录名对应同名.php文件”的场景。

解决方案

方案一(推荐,更安全)

修改.htaccess内容为:

RewriteEngine On

# 处理请求为目录但存在同名.php文件的情况(如 info → info.php)
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)/?$ $1.php [NC,L]

# 处理普通无后缀请求(如 info/public → info/public.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
  • 第一条规则优先匹配目录请求,若该目录存在同名.php文件,直接重写为对应.php文件,同时兼容带斜杠和不带斜杠的请求。
  • 第二条规则处理非目录的无后缀请求,仅当对应的.php文件存在时才执行重写,避免无效跳转。

方案二(简单但需注意安全)

修改.htaccess内容为:

RewriteEngine On
DirectorySlash Off

# 只要请求路径加.php后是存在的文件,就重写
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
  • DirectorySlash Off 禁用Apache自动给目录请求添加末尾斜杠的行为,确保info请求不会被重定向到info/。
  • 后续规则将所有无后缀请求重写为对应的.php文件(前提是文件存在)。

注意:此方案可能存在目录遍历风险,若info/目录下有敏感文件,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:45:50