如何通过.htaccess仅移除网站根目录文件的PHP扩展名
解决根目录PHP文件移除扩展名、子文件夹保留的问题
这个需求很清晰,咱们只需要调整RewriteRule的匹配范围,让它只作用于根目录的请求,就能避免影响子文件夹里的文件啦。修改后的.htaccess代码如下:
RewriteEngine on # 确保请求的不是目录 RewriteCond %{REQUEST_FILENAME} !-d # 明确检查根目录下对应的.php文件是否存在 RewriteCond %{DOCUMENT_ROOT}/$1.php -f # 仅匹配根目录下的无扩展名请求(不含斜杠的路径) RewriteRule ^([^/]+)/?$ $1.php [L]
代码细节解释:
- RewriteRule ([/]+)/?$:这里的
[^/]+是核心,它专门匹配不包含斜杠的字符串,也就是根目录下的请求(比如index、products),像files/file_manager这种带斜杠的子文件夹路径会直接被排除,不会触发这条规则。 - RewriteCond %{DOCUMENT_ROOT}/$1.php -f:精准检查根目录下是否存在对应的
.php文件,避免对无效请求做无意义的重写。 - [L]标记:表示这是最后一条规则,如果匹配成功就停止后续规则处理,能提升重写的效率。
实际效果验证:
- 访问
yourdomain.com/index→ 自动映射到根目录的index.php - 访问
yourdomain.com/products→ 自动映射到根目录的products.php - 访问
yourdomain.com/files/file_manager.php→ 正常保留扩展名访问,完全不受规则影响
内容的提问来源于stack exchange,提问作者Alexandre Cristo
相关产品推荐
相关产品推荐

