【发布时间】:2013-11-03 10:25:25
【问题描述】:
我在设置我的 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/,有什么想法吗?
【问题讨论】:
-
dev.domain.com上的 DOCUMENT_ROOT 是什么?
标签: .htaccess localization multilingual http-status-code-301