2013-09-30 42 views
1

使用.htaccess我重寫這樣一個URL工作:基地或相對路徑不上的.htaccess重寫規則

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{QUERY_STRING} !(^|&)lang=[a-z]{2}(&|$) [NC] 
RewriteCond %{REQUEST_URI} !^/(en|it) [NC] 
RewriteRule ^(?:[a-z]{2}/)?(.*)$ /en/$1 [L,NC,R] 

RewriteRule ^([a-z]{2})/(.*)$ /index.php?lang=$1&page=$2 [L,NC,QSA] 

遵循這一條件:

http://website.com -> http://website.com/en 
http://website.com/en -> http://website.com/en 
http://website.com/it -> http://website.com/it 
http://website.com/de -> http://website.com/en 

有關更多信息,請參閱this thread

現在的問題是當我必須訪問一些資產。例如,我必須加載CSS/Styles.css中

我試圖改變基準位置通過添加鹼得到的絕對路徑:

<base href="http://website.com/"> 

或由通過將設定的相對路徑:

../css/styles.css 

瀏覽器要求以正確的方式文件:

Request URL:http://website.com/css/styles.css 
Status Code:302 Found 

但我沒有得到任何文件和響應報頭是:

Location:http://website.com/en/css/styles.css 

如何解決這個問題呢?

回答

2

您不需要重定向您的資產。這取決於你如何將您的網站的工作,您可以排除某些目錄請求或排除存在資源的請求(如文件或目錄):

RewriteCond %{QUERY_STRING} !(^|&)lang=[a-z]{2}(&|$) [NC] 
RewriteCond %{REQUEST_URI} !^/(en|it) [NC] 
RewriteCond %{REQUEST_URI} !^/css 
RewriteRule ^(?:[a-z]{2}/)?(.*)$ /en/$1 [L,NC,R] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} !(^|&)lang=[a-z]{2}(&|$) [NC] 
RewriteCond %{REQUEST_URI} !^/(en|it) [NC] 
RewriteRule ^(?:[a-z]{2}/)?(.*)$ /en/$1 [L,NC,R] 
+0

第一個解決方案是完善!有沒有辦法一次包含/ css /文件夾及其所有子目錄?我也有一些問題..它與CSS工作,但與其他文件,如imgs或Js,我得到一個404 – Luke

+0

沒關係,這是我的錯誤。非常感謝! – Luke