2014-01-30 97 views
0

我不是很熟悉.htaccess,但我設法將以下文件放在一起。可悲的是它不工作...htaccess的語言檢測,重定向+清潔的網址

它所要做的: - 檢測,如果用戶是法國=重定向到example.com/fr - 檢測用戶是否是其他任何語言=重定向到example.com/nl - 無顯示的.html所有URL和.PHP

這是代碼我對語言檢測,但它循環..

RewriteEngine on 
    RewriteCond %{HTTP:Accept-Language} (fr) [NC] 
    RewriteRule .* http://www.example.com/fr [R,L] 
    RewriteRule .* http://www.example.com/nl [R,L] 

這是代碼我有乾淨的網址,但它只適用於.html,我需要.html和.php

RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}.html -f 
    RewriteRule ^(.+)$ $1.html [L,QSA] 

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/ 
    RewriteRule ^(.*)\.html$ /$1 [R=301,L] 

那麼,我如何得到這兩個工作,並放在一起在同一個文件?映入眼簾。

+0

試試這個模塊http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html它不是你想要的,但它是從Apache原生的 – BrenoZan

回答

0

你需要檢查你是不是已經在/fr//nl/目錄:

RewriteEngine on 
RewriteCond %{HTTP:Accept-Language} (fr) [NC] 
RewriteRule ^(?!fr/)(.*)$ http://www.example.com/fr/$1 [R,L] 
RewriteRule ^(?!nl/)(.*)$ http://www.example.com/nl/$1 [R,L] 

然後你只需要複製你的規則爲HTML和PHP:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f 
RewriteRule ^(.+)$ $1.php [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f 
RewriteRule ^(.+)$ $1.html [L,QSA] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(php|html)($|\?|\) 
RewriteRule ^(.*)\.(php|html)$ /$1 [R=301,L] 
+0

如何將兩段代碼放在一起?然後我會嘗試一下。 – user3252491

+0

所以我試着使用這段代碼,但是我得到了一個無限循環..瀏覽器轉到example.com/nl/nl/nl/nl/nl/......等等 – user3252491