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

.htaccess配置:将Kohana子目录非www域名重定向到www并去除index.php

解决Kohana子目录非www重定向到www且不自动追加index.php的问题

我很清楚你遇到的这个麻烦——原本想把/quotes子目录下的非www请求转去www版本,结果重定向后末尾自动加了index.php,破坏了Kohana的URL美化效果。问题核心其实是规则执行顺序不对:如果先跑Kohana的内部重写再做www跳转,就会带上index.php。咱们把顺序反过来,先完成www重定向,再处理Kohana的URL重写,就能解决问题。

直接上完整的/quotes目录下的.htaccess配置(注意是子目录里的这个文件,不是根目录WordPress的.htaccess):

1. 先做非www到www的强制重定向

RewriteEngine On
# 匹配非www开头的域名
RewriteCond %{HTTP_HOST} !^www\. [NC]
# 只对/quotes子目录的请求生效,不影响根目录的WordPress
RewriteCond %{REQUEST_URI} ^/quotes/ [NC]
# 301永久重定向到www版本,保留原请求路径,不会加index.php
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/quotes/$1 [R=301,L]

这里的关键是[L]标记,它会让这条重定向规则执行后就停止,不会触发后面的Kohana重写,避免带上index.php。

2. 再添加Kohana的URL美化规则

在上面的重定向规则之后,放Kohana默认的移除index.php的规则:

# Kohana内部重写,移除URL里的index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

这部分规则的作用是:如果请求的不是真实存在的文件或目录,就把请求转发给index.php处理,同时保持URL里没有index.php。

几个重要的注意点

  • 一定要确保/quotes目录的.htaccess优先级更高,Apache默认会优先读取子目录的配置,所以不用太担心和根目录WordPress的规则冲突。
  • 测试的时候可以先把R=301改成R=302(临时重定向),确认跳转正常后再改回301,避免浏览器缓存错误的规则。
  • 顺便检查下Kohana的application/config/config.php里的base_url,最好设置成https://www.mydomain.com/quotes/,这样框架生成的URL本身就是www版本,减少不必要的跳转。

这样配置之后,你访问mydomain.com/quotes/my-favorite-quote会直接跳转到www.mydomain.com/quotes/my-favorite-quote,完全不会出现多余的index.php,Kohana的URL美化也能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:23:02