Hor*_*rse 13 .htaccess multilingual localization http-status-code-301
我在设置htaccess时遇到一些问题,允许使用子目录方法的多种语言,例如:
http://www.domain.com/en/
http://www.domain.com/sw/
http://www.domain.com/ie/
Run Code Online (Sandbox Code Playgroud)
另外,为了使事情复杂化,该项目目前还没有,它在开发服务器上.例如,我目前正在访问该项目:
http://dev.domain.com/devname/projectname/
Run Code Online (Sandbox Code Playgroud)
我希望以上内容自动301重定向到:
http://dev.domain.com/devname/projectname/en/
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
以上将实际重定向到:
http://dev.domain.com/home/webserver_dir/devname/projectname/en/
Run Code Online (Sandbox Code Playgroud)
..如果我使用RewriteBase它似乎只是转到......
http://dev.domain.com/en/
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如何使语言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
Run Code Online (Sandbox Code Playgroud)
...但现在它重定向到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/任何想法?
mel*_*lon 15
您是否尝试过以下链接中的答案?它应该做你想要实现的目标.
RewriteEngine On
RewriteBase /
# empty url -> redirect to en/
RewriteCond %{QUERY_STRING} !lang=(en|de)
RewriteRule ^$ en/ [R=301,L]
# url is ONLY '/en' or '/de' -> redirect to /en/ or /de/ (adding slash)
RewriteRule ^(en|de)$ $1/ [R=301,L]
# now all urls have en/ de/ -> parse them
RewriteRule ^(en|de)/(.*)$ $2?lang=$1&%{query_STRING} [L]
Run Code Online (Sandbox Code Playgroud)