如何通过.htaccess实现子文件夹默认用index.php并隐藏.php后缀?
解决方案
直接修改你的.htaccess代码,添加目录默认页的内部重写规则,并调整原有规则的条件,确保所有需求兼容:
RewriteEngine On Options +FollowSymLinks # 将带index.php的URL永久重定向到简洁版本 RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ https://www.mydomain.com/$1 [R=301,L] # 为目录自动添加结尾斜杠(可选,用于URL规范) RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*[^/])$ /$1/ [R=301,L] # 当请求目录时,内部转发到该目录下的index.php RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)/$ $1/index.php [L] # 移除URL中的.php后缀,仅当请求的路径不是文件或目录时生效 RewriteCond %{REQUEST_FILENAME}!-f RewriteCond %{REQUEST_FILENAME}!-d RewriteRule ^([^\.]+)$ $1.php [NC,L]
规则说明
- index.php重定向:保留原有逻辑,把
mydomain.com/dashboard/index.php这类URL永久跳转到mydomain.com/dashboard/,避免重复内容并保持URL整洁。 - 目录补全斜杠:可选规则,确保所有目录请求都以
/结尾,避免同一目录出现两种URL(带/和不带/)。 - 目录默认页转发:核心规则,当请求的是一个存在的目录(比如
dashboard/),内部将请求转发到该目录下的index.php,主机无需设置默认主页,用户看到的URL依然是dashboard/。 - 移除.php后缀:在原有规则基础上添加
!-d条件,确保当请求的是目录时不会触发这条规则,避免冲突;只有当请求的路径既不是文件也不是目录时,才自动添加.php后缀实现无后缀访问。
内容的提问来源于stack exchange,提问作者Luuk
相关产品推荐
相关产品推荐

