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

如何让.htaccess优先访问同名PHP文件而非文件夹?

解决方法

问题根源在于Apache默认的DirectorySlash机制:当请求的路径对应一个真实存在的文件夹时,Apache会自动跳转到带斜杠的文件夹路径,这个行为会优先于你的Rewrite规则执行,导致同名PHP文件被忽略。

你需要做两步调整来实现优先访问同名PHP文件:

  1. 禁用自动添加文件夹斜杠的跳转
    在Options +FollowSymLinks -MultiViews这一行下方添加:
DirectorySlash Off
  1. 给PHP匹配规则增加排除文件夹的条件
    修改原有的“允许无后缀PHP访问”规则,确保仅当请求路径不是文件夹时,才尝试匹配同名PHP文件:
# 优先访问同名PHP文件,忽略文件夹
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.php [L]

修改后的完整.htaccess配置如下:

# BEGIN - Allow Sucuri Services
<IfModule mod_rewrite.c>
    RewriteRule ^sucuri-(.*)\.php$ - [L]
</IfModule>
# END - Allow Sucuri Services

<Files 403.shtml>
order allow,deny
allow from all
</Files>

# 禁用MultiViews和自动文件夹斜杠跳转
Options +FollowSymLinks -MultiViews
DirectorySlash Off

RewriteEngine on

# 重定向HTTP到HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 重定向非www到www
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

# 优先访问同名PHP文件,忽略文件夹
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.php [L]

# 前端控制器规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ci_index.php?/$1 [L]

补充说明

  • DirectorySlash Off直接阻止Apache自动跳转带斜杠的文件夹路径,让你的Rewrite规则有机会优先匹配PHP文件。
  • 新增的RewriteCond %{REQUEST_FILENAME} !-d是双重保险,确保只有当请求路径不是文件夹时,才触发PHP文件的匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:35:07