如何在子目录使用Index.php并解决htaccess自动加斜杠、去index.php问题
最终可用配置
RewriteEngine On RewriteBase / # 处理index.php跳转,去掉路径末尾的index.php RewriteCond %{THE_REQUEST} /index\.php [NC] RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE] # 仅给真实存在的目录添加末尾斜杠,避免给普通路径加斜杠 RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_URI} !/$ RewriteRule . %{REQUEST_URI}/ [L,R=301] # 可选:内部重写规则,无斜杠路径可直接匹配同名php文件(如site.com/en/test对应en/test.php) # RewriteCond %{REQUEST_FILENAME} !-d # RewriteCond %{REQUEST_FILENAME}\.php -f # RewriteRule ^(.*)$ $1.php [L]
问题解决逻辑
问题1:去除index.php后缀跳转
新增的index.php匹配规则会识别所有请求路径中末尾带index.php的请求,自动剥离index.php后跳转,比如site.com/en/index.php会直接跳转到site.com/en/,根目录site.com/index.php也会自动跳转到site.com/。
调试阶段建议先把R=301改成R=302测试,避免浏览器缓存旧的301规则导致配置更新不生效
问题2:避免非目录路径自动加斜杠
原有加斜杠规则的判断条件!-f逻辑过宽,所有非文件路径都会被强制加斜杠。将判断条件替换为-d后,仅当请求路径对应服务器上真实存在的目录时,才会自动补末尾斜杠,类似site.com/en/test这类自定义路径不会被强制加斜杠,可正常访问。
如果你的无斜杠路径实际对应同名php文件,可把配置末尾注释的3行内部重写规则开启,无需修改URL即可正常访问对应php文件。
内容的提问来源于stack exchange,提问作者LAURENZ LENŰSCH
相关产品推荐
相关产品推荐

