htaccess的多语言网站与子目录和默认301 [英] htaccess multi language site with sub directories, and default 301

查看:326
本文介绍了htaccess的多语言网站与子目录和默认301的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些问题,建立我的htaccess允许使用子目录方法如多国语言:

I am having some issues setting up my htaccess to allow multiple languages utilising the sub directory method eg:

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它似乎只是转到...

..and if I use RewriteBase it seems to just goto...

http://dev.domain.com/en/

所以我的问题:如何获得语言的URL正常工作相对于目录中的我的dev的服务器上,然后理想地将工作当它生活在没有任何环境的具体规则

So my question: How do I get the language URLs working correctly relative to the directory its in on my dev server, and then ideally will work when it goes live without any environment specific rules.

奖金的问题:我是否需要添加在我所有的后续重写规则前面的([AZ {2}] +)位或者我可以有一个捕获所有将影响所有其他规则?

Bonus question: Do I need to add the ([a-z{2}]+) bit in front of all my subsequent rewrite rules or can I have a catch all that will effect all further rules?

我已经减少它归结为下面的建议...

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

......但现在其重定向到<$c$c>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/,任何想法?

推荐答案

您是否尝试过在下面的链接的答案吗?它应该做你想要达到的目的。

Have you tried the answer in the following link? It should do what you're trying to achieve.

<一个href="http://stackoverflow.com/questions/17474511/endless-redirect-loop-by-htaccess-rules-multi-language">Endless重定向循环通过htaccess的规则,多语言

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]

这篇关于htaccess的多语言网站与子目录和默认301的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆