2011-12-28 79 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]