如何通过htaccess移除URL中的index.php并实现指定重定向?
解决.htaccess移除index.php及不存在目录重定向问题
针对你遇到的两个问题,我调整了.htaccess规则,既能把index.php重定向到主域名,也能处理不存在的目录/文件重定向需求,同时适配你的单index文件场景和Cloudflare环境:
Options +FollowSymlinks Options -Indexes RewriteEngine On RewriteBase / # 1. 永久重定向 index.php 到主域名 RewriteRule ^index\.php$ / [R=301,L] # 2. 重定向所有不存在的文件/目录到主域名 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ / [R=301,L]
规则说明:
- 第一条规则:精确匹配
index.php请求,通过R=301发送永久重定向到根目录,L标记确保这条规则执行后不再处理后续规则,避免冲突。 - 第二条规则组:先通过
RewriteCond检查请求的路径既不是存在的文件(!-f)也不是存在的目录(!-d),然后把所有这类请求重定向到主域名。
注意事项(针对Cloudflare):
因为Cloudflare会缓存重定向规则,修改.htaccess后建议:
- 登录Cloudflare后台,在「缓存」→「缓存规则」里清空所有缓存;
- 用浏览器隐私模式测试,避免本地浏览器缓存旧的跳转结果。
如果你之前保留内部转发到index.php是为了处理路由,但你提到未使用框架且只有单个index文件,现在的规则已经完全满足你的需求——存在的文件/目录正常访问,不符合条件的请求全部重定向到主域名,同时彻底移除了index.php的访问入口。
内容的提问来源于stack exchange,提问作者Hiptop
相关产品推荐
相关产品推荐

