2011-12-28 80 views
0
  • 我有一个Drupal 6多点,与2个域(www.example.com和www.domain.com),共享一些常见的内容。Drupal的多站点的htaccess:重写所有语言默认语言的一个子网站

  • 域example.com有三种语言(EN,FR,NL)。语言由路径前缀(/ en,/ fr,/ nl)设置。其他域domain.com只是一种语言(NL)。

  • 问题:多次domain.com在错误的语言显示,即使没有路径前缀填充不知怎的,它似乎默认为EN,尽管它不总是这样 - 行为似乎并不一致。

  • 解决方案(至少我希望如此):因为我不是一个Drupal开发人员(我inhereted从一个前同事的部位)我不知道如何在Drupal来解决这个问题,所以我想最好的修复它的方法是将一些重写规则添加到.htaccess中。

  • 我不是htaccess /正则表达式专家,并且无法正常工作。你可以在下面找到我目前的重写规则,任何帮助或建议都是非常受欢迎的。

  • 一些例子:

    • www.domain.com/fr/some-title需要被重写,以www.domain.com/nl/some-title
    • www.domain.com/node/1975需要被重写,以www.domain.com/nl/node/1975

这些是已经在那里重写规则:

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

我尝试添加此:

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC] 
RewriteRule ^/(.*)$ /nl/$1 

,并期望这只是在前面加上/ NL /所有路径(因此是不因为/fr/some-title一个完整的解决方案将成为/nl/fr/some-title) - 但是,快速测试显示我说:

  • /fr/some-title改写为/nl/some-title(这正是我需要的,但不是我所期望的)
  • /some-title不可重写

  • 问题:任何想法可能是什么问题?或者这可能是由其他(Drupal)设置引起的?还是有更好的方法来解决我的问题?

  • 只是为了完整起见:直播网站www.cinemazuid.be

+0

在* admin/settings/language *中,您可以设置默认语言。虽然我不知道这是如何工作在彩泥上。你检查过了吗?我猜你在其他人之前加了你的RewriteRule * (L表示之后不会执行其他RewriteRules) – lumbric 2011-12-28 14:53:23

+0

@lumbric 1)/ nl被设置为默认值。 2)是的重写规则是*之前的*重写规则结尾的L. 3)我不明白你的第二个评论: -/ – ptriek 2011-12-28 15:00:35

+0

嗯,不是Drupal荣誉'接受语言? – fge 2011-12-28 15:16:01

回答

3

如果这个规则

的RewriteRule^/(。*)$/NL/$ 1

是.htaccess文件,我觉得很奇怪,它的作品为主导/总是剥离出来,所以理论上不会匹配的任何请求。

如果你的愿望是给力NL的默认语言不指定语言的请求,然后添加以下规则,以你的.htaccess文件的顶部之前,任何现有的规则

#if request is for existing file or directory 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
#then stop processing 
RewriteRule .* - [L] 

#replace fr with nl. This rule 
RewriteRule ^fr/(.*)$ /nl/$1 [L,R=301] 

#if the request does not have a language of en or nl 
RewriteCond %{REQUEST_URI} !^/(en|nl)/ [NC] 
#redirect with nl as default language 
RewriteRule .+ /nl%{REQUEST_URI} [L,R=301] 

如果你不想重定向,只是下降的R=301

我编辑上面的代码与/nl/some-title/更换/fr/some-titleL标志告诉mod_rewrite停止处理进一步的规则,这通常是你想要的,除非你有另一个规则需要进一步处理当前的请求。

+0

感谢您的建议。我有一些问题,但是:1)它似乎缺少一个元素:/ fr/some-title也应该被重写为/ nl/some-title/2)我如何将它集成到现有的重写规则中?我被告知L表示'最后一次重写规则',你的建议还包含这个标志? – ptriek 2011-12-28 15:32:02

+0

@ptriek参见 – 2011-12-28 16:16:16

+0

以上的编辑,再次感谢+1。我仍然缺少一些元素(比如如何与现有的index.php重写规则集成)。然而,我已经测试了一些额外的东西,而且事情似乎更复杂 - 即使没有重写规则,某些页面被重定向到/ nl,而其他的则不是。我承担不起这么多时间,所以我想我最好的办法是试着找一个Drupal开发者来看看它... – ptriek 2011-12-28 16:44:27

0
#redirect /fr/* and /en/* to /* 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteRule ^(en|fr)/(.*)$ /$2 [R,L] 

#internally rewrite /* to /nl/* 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteCond $1 !^nl/$ [NC] 
RewriteRule ^(.*)$ /nl/$1 

#drupal code 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]