2012-04-03 85 views
2

好吧,基本上我有部分.htaccess部分工作,但還不完全。我的服務器上有兩個子目錄,分別是英文和法文網站(子目錄分別是en和fr)。當用戶在URL欄中輸入內容時,我希望他們輸入的任何內容都可以添加到en或fr(取決於用戶在其計算機上的默認語言)。.htaccess多語言站點

如果他們輸入domain.com/test(並且他們的語言設置爲英語),我希望它重定向到domain.com/en/test/。我只想要這樣做,如果測試不是根目錄中的文件夾,目錄,文件或ANYTHING。

這裏是我的.htaccess代碼到目前爲止那種作品:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteCond %{HTTP:Accept-Language} ^en [NC] 
RewriteRule ^(.*)$ /en/$1/ [R=301,L] 

我的代碼的問題,雖然,然而,就是如果用戶在類似domain.com/test/進入(WITH斜線),它將無法正常工作,因爲我的.htaccess中有另一部分強制在所有內容的末尾加上斜線。如果用戶輸入domain.com/test.html(並且該域是根目錄中的文件),它將不起作用,因爲我的.htaccess中的另一部分刪除了.html擴展名。

基本上,我需要這個重定向工作在絕對所有的情況下,除了邏輯上不應該的地方。

無論如何,如果你們中的任何人都可以幫助我,我會非常感激。

回答

2

好的。這就是我的做法:

無論如何,總是需要語言後綴/ en,/ fr等。因此將其設置爲URL GET。 使用PHP,你可以強制它被插入。

RewriteRule ^([a-z]{2})/?$ index.php?language=$1 
RewriteRule ^([a-z]{2})/register/?$ register.php?language=$1 

使用PHP或任何腳本你使用,你可以檢查IP,設置國家自動獲取,& /或設置會話。建立會話到您的所有網址,讓所有的鏈接都

$url.$lang.$pagename; 

設爲可選與/斜槓?如上面的例子。

我不使用{REQUEST_FILENAME},而是使用所有可能的主要URL的列表 - 但如果您願意,也可以使用{REQUEST_FILENAME},但您需要考慮真實目錄。

+0

我不想使用PHP,我只對使用.htaccess文件感興趣。就像我在OP中所說的那樣,我有一部分工作。如果輸入的URL末尾沒有斜線,則會添加/ en /。但它也會在某些情況下重寫URL,例如:如果該文件已位於根文件夾中。 – shootingrubber 2012-04-03 08:03:24

+0

我的原始代碼也存在另一個問題。當我真的在en/subdomain中時,它會在URL中添加另一個en /。所以如果我在domain.com/en/test上,然後點擊該示例,它將轉到domain.com/en/en/example。 – shootingrubber 2012-04-03 08:10:29

+0

謝謝,它幫助我。 – Elkas 2012-12-20 17:11:49