2013-02-08 19 views
1

如果請求是由相對路徑進行的,Apache不會捕獲下面的.htaccess規則。Apache不捕獲.htaccess規則中的相對路徑

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^(.*)/?$ index.php?var=$1 [NC,L] 

例如,如果發送給客戶端的HTML包括:

<link href="CSS/main.css" rel="stylesheet" type="text/css" /> 

Apache將跳過該規則。但是,如果HTML包括:

<link href="http://host.com/CSS/main.css" rel="stylesheet" type="text/css" /> 

它工作得很好。

在內部的相對路徑也是如此。 CSS文件,如:

background-image:url(../images/image.png); 

也就是說,如果請求的CSS首先被請求了全路徑名。

這怎麼可能?

+0

規則的想法是什麼?我沒有看到他們正在做任何事情,請解釋。 – 2013-02-08 22:02:45

回答

0

第二個RewriteRule將只在內部重寫搜索路徑,在服務器上。所以,當一個相對的搜索路徑被髮送到客戶端,說:

<link href="CSS/main.css" rel="stylesheet" type="text/css" /> 

無論是在第二重寫規則被稱爲$1將被包括在搜索路徑。

因此,如果例如www.example.com/en/是由客戶請求的,並且包含相對路徑href="CSS/main.css"的HTML文檔被髮回,客戶將期望css文件位於www.example.com/en/CSS而不是www.example.com/CSS/。當然,如果示例中的css文檔是以直接路徑引用的,如:href="http://example.com/CSS/main.css",文檔將被正確檢索。