2010-12-19 69 views

回答

4

逐行解釋:

RewriteRule .* index.php [L] 

將被解釋第一和每一個請求相匹配(對主機名和端口後的URL部分匹配,並且查詢字符串之前)。 .*是一個匹配所有時間的正則表達式。更好更快的規則可能是:

RewriteRule^index.php [L] 

在正則表達式來^,每一個都有一個開始字符串相匹配。這相當於.* - >匹配所有東西。

找到匹配後,處理將繼續執行RewriteCond(itions)。 這兩個RewriteConditions鏈接在一個看不見的邏輯AND。只有在兩個RewriteConditions都爲真時,該塊纔會匹配。

RewriteCond %{REQUEST_FILENAME} !-f # Check if given file is not a file AND 
RewriteCond %{REQUEST_FILENAME} !-d # Check if given directory is not a file and 

示例:如果您將在服務器上具有以下文件結構。

. 
|-- css 
| `-- base.css 
|-- img 
| `-- logo.png 
`-- index.php 

如果請求URL example.com/ CSS/base.css以下步驟會發生。

  1. 匹配的重寫規則(匹配所有的時間)
  2. 將不匹配RewriteCond %{REQUEST_FILENAME} !-f,因爲css/base.css是一個文件。
  3. RewriteRule將被跳過,因爲沒有發生匹配,如果請求URL example.com/ EN /約以下步驟會發生處理將測試其他規則和條件*

  1. 匹配的RewriteRule(符合所有的時間)
  2. 比賽RewriteCond %{REQUEST_FILENAME} !-f,因爲en/about是沒有文件。
  3. 匹配RewriteCond %{REQUEST_FILENAME} !-d,因爲en/about沒有目錄。
  4. 組合的RewriteRuleRewriteCond創建了一個肯定的匹配 - >
  5. 將請求重定向index.phpL

國旗L裝置最後一個規則,這將停止的處理。更多關於flags

此規則組合通常用於將所有請求重定向到Web應用程序的單個入口點。爲避免通過index.php提供靜態內容,文件和目錄將由web服務器提供,而不是由index.php提供。動態站點請求的分派將在index.php的邏輯內完成。

*可以找到正確的數據流量here

3

它重寫不磁盤上的文件((!-f))或目錄((!-d))匹配的index.php所有請求。 [L]告訴mod_rewrite在此之後停止處理規則。