我一直在使用以下的.htaccess并且一直工作正常,直到我做了一个do-release-upgrade并且确实更新了apache2。
我现在的.htaccess是(我正在使用cakephp 2.3)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# empty url -> redirect to en/
RewriteCond %{QUERY_STRING} !lang=(en|es)
RewriteRule ^$ en/welcome [R=301,L]
# url is ONLY '/en' or '/es' -> redirect to /en/welcome or /es/welcome (adding slash)
RewriteRule ^(en|es)$ $1/welcome [R=301,L]
# url is ONLY '/en/' or '/es/' -> redirect to /en/welcome or /es/welcome (adding slash)
RewriteRule ^(en|es)/$ $1/welcome [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
所以,如果有人去了
www.domain.com - &gt; www.domain.com/en/welcome
www.domain.com/en - &gt; www.domain.com/en/welcome
www.domain.com/es - &gt; www.domain.com/es/welcome
www.domain.com/en/ - &gt; www.domain.com/en/welcome
www.domain.com/es/ - &gt; www.domain.com/es/welcome
第一个重定向是停止工作的那个..如果有人进入根域,它就不会被重定向到默认的英文版本。
解
在我的情况下,我设法解决了这个问题,感谢@dav,说看看cakephp路由中的重定向。
所以我删除了我的.htaccess中重写的前两个
#RewriteCond %{QUERY_STRING} !lang=(en|es)
#RewriteRule ^$ en/welcome [R=301,L]
在我的routes.php上添加了以下行(在所有路由器::连接之前)
Router::redirect('/', array('language' => 'en','controller' => 'welcome', 'action'=>'/'));