如何使用htaccess&apache重写/页面到/ xx / page?

想像一下三步跳跃的体育赛事,前两步完美到位,第三步跳入空中,永不回头,最终摔倒! 这就是这个问题归结为:)

第1 /somepage?ln=xx 当用户导航到/xx/somepage时,工作服务/somepage?ln=xx

 # if user inputs nice urls /xx/somepage to serve page /someapge?ln=xx RewriteRule ^([az][az])/(.*) /$2?ln=$1 [L] 

第二步:只有在给定语言的情况下才能进入主页/ xx /

 # if language xx given but no page given? then redirect to its home /xx/home RewriteRule ^([az][az])/?$ /$1/home [R=301,L] 

第3步:碰撞

 # if user inputs /somepage then redirect to default english: /en/somepage # if user inputs /somepage?ln=xx redirect to nice url /xx/somepage RewriteCond %{REQUEST_URI} !^/../ [NC] RewriteRule ^(.*)$ /en/$1 [R=301,L] 

第三个规则是我们被卡住的地方… PS:redirect应该适用于扩展名文件somepage?ln = xx以及扩展名为somepage.abc?ln = xxx的文件,其中扩展名可以是任何2或3个char-单词,或者如果更容易,使用以下扩展名手动检查我使用[.php .uu .u3c .vls]

感谢千人!

这工作(testing):

 RewriteCond %{REQUEST_URI} !^/../ [NC] RewriteRule ^(.*)$ /en$1 [R=301,L] 

Apache Mod_Rewrite文档 , 重写指南和高级重写指南 。

编辑:
testing了以上(与以前一样); 在我的Apache 2.2服务器上工作。

编辑2:
应该没有问题,只需要这样的东西:

 # If just the language is specified (ie example.com/en) RewriteCond %{REQUEST_URI} ^/..$ [NC] RewriteRule ^(.*)$ $1/ # If no language subfolder, default to 'en' RewriteCond %{REQUEST_URI} !^/../ [NC] RewriteRule ^(.*)$ /en$1 [R=301] # If no page specified, default to home. RewriteCond %{REQUEST_URI} !^/../.+ [NC] RewriteRule ^/(..) /$1/home.html [R=301] # If no ln query, tack it on RewriteCond %{QUERY_STRING} !ln= [NC] RewriteRule ^/(..)/(.*) /$1/$2?ln=$1 [R=301] 

注意:小心你的404页面正常工作。 如果它不是无效链接将在一个无限循环(即,404页不会工作)结束。
注2:如果用户键入example.com/en ,他们将被redirect到example.com/en/en?ln=en ,所以请确保URL中的尾部斜杠,否则。
注3:如果您愿意,可以从最后一条规则中删除[R=301] ,然后用户将看到example.com/en/home.html页面的请求实际上是example.com/en/home.html?ln=en 。 如果您的网站使用GET请求,这将不起作用。

编辑3:
增加了另外一个cond / rule对,用来捕获是否有人input了语言,而没有结尾的斜线。

这是我使用的代码。 它会接受任何语言和国家。

 # Tout pays de 2 digits et langue de 2 ou 3 digits ou juste la langue pas de pays - fonctionne bien et passe language et country #www.country.com/index.html devient www.country.com/index.php #www.country.com/fr/index.html devient www.country.com/index.php?language=fr #www.country.com/ca/fr/index.html devient www.country.com/index.php?country=ca&language=fr RewriteRule ^([a-zA-Z]{2})/([a-zA-Z]{2,3})/index\.html$ index.html?country=$1&language=$2 RewriteRule ^([a-zA-Z]{2,3})/index\.html$ index.html?language=$1 RewriteRule ^index\.html$ /index.php [L]