我在设置我的 htaccess 以允许使用子目录方法的多种语言时遇到一些问题,例如:
http://www.domain.com/en/
http://www.domain.com/sw/
http://www.domain.com/ie/
更复杂的是,该项目目前还没有上线,它在开发服务器上。例如,我目前正在访问该项目:
http://dev.domain.com/devname/projectname/
我希望上面自动 301 重定向到:
http://dev.domain.com/devname/projectname/en/
这是我的htaccess:
Options +FollowSymLinks -MultiViews
RewriteEngine on
# ----------------------------------------------------------------------
# MULTI LANGUAGE SUB DIRECTORY
# ----------------------------------------------------------------------
RewriteCond %{REQUEST_URI} !^/(en|sw)/
RewriteRule ^(.*)$ en/$1 [R=301,L]
# ----------------------------------------------------------------------
# Rewrite rules
# ----------------------------------------------------------------------
## CASE STUDIES ##
RewriteRule ^casestudies/([^/\.]+).html$ index.php?controller=contents&method=viewCasestudy&link=$1 [L,QSA]
## PRODUCTS ##
RewriteRule ^products/([^/\.]+).html$ index.php?controller=contents&method=viewProduct&link=$1 [L,QSA]
RewriteRule ^([a-z{2}]+)(/)?$ index.php?controller=contents&method=viewHome&lang=$1 [L,QSA] # Default load
RewriteRule ^(/)?$ index.php?controller=contents&method=viewHome [L,QSA] # Default load
以上实际上将重定向到:
http://dev.domain.com/home/webserver_dir/devname/projectname/en/
..如果我使用 RewriteBase 它似乎只是转到...
http://dev.domain.com/en/
所以我的问题是:我如何让语言 URL 相对于它在我的开发服务器上的目录正常工作,然后理想情况下在没有任何环境特定规则的情况下运行时工作。
额外的问题:我是否需要在所有后续重写规则前面添加 ([az{2}]+) 位,还是我可以捕获所有会影响所有进一步规则的内容?
编辑 - - - - - - - - - - - - - - -
我已按照建议将其减少到以下...
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /devname/projectname/
RewriteCond %{REQUEST_URI} !^/(en|sw)(/|$) [NC]
RewriteRule ^(.*)$ en/$1 [R=301,L]
RewriteRule ^([a-z]{2})/?$ index.php?controller=contents&method=viewHome&lang=$1 [NC,L,QSA] # Default load
...但现在它重定向到http://dev.domain.com/devname/projectname/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/
,有什么想法吗?