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

如何通过.htaccess移除URL中的index.php?并实现301重定向

.htaccess 移除URL中的index.php?并实现正确路由

完整规则代码

RewriteEngine On

# 重定向旧链接:index.php?/xxx → /xxx
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php\?/(.*)\sHTTP/ [NC]
RewriteRule ^ /%1? [R=301,L,NE]

# 移除不带问号的index.php(如index.php/xxx → /xxx)
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/ [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

# 将非真实文件/目录的请求转发到index.php处理
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

规则说明

  • 旧链接重定向:精准匹配index.php?/开头的查询字符串,提取?/后的路径部分,通过301永久重定向到干净的URL。末尾的?会自动清除原URL的查询参数,确保最终URL不含问号。NE标记防止路径中的特殊字符被不必要编码,L表示执行完这条规则后停止后续匹配。
  • 普通index.php移除:保留你原有的规则,处理不带问号的index.php路径(如example.com/index.php/destinations),确保这类旧链接也能重定向到干净路径,同时排除/system/目录避免影响后台。
  • 路由转发:确保用户访问新的干净URL时,服务器能将请求转发到index.php处理,同时保留完整路径信息。规则排除了真实存在的文件和目录,避免图片、CSS、JS等静态资源被错误转发。

之前尝试规则的问题

你之前的第二条规则没有排除真实文件/目录,会导致静态资源也被转发到index.php引发异常;同时正则匹配HTTP.*$的写法不够严谨,改为HTTP/能兼容不同HTTP版本的请求格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:31:01