2012-11-13 52 views
17

我正在設置Apache重寫規則來整理我的CodeIgniter URL。

This question(和許多論壇帖子等,我已經左右的地方找到)文件使用以下規則(或非常類似的東西):

RewriteEngine on 
RewriteCond $1 !^(index\.php|phpinfo\.php|images|robots\.txt|sitemap\.xml\.gz|sitemap\.xml|assets) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

我知道$ 1重寫規則是指後從(。*)中捕獲到的字符串,但是第一個$ 1(在RewriteCond後面)代表什麼?很多我見過的例子都使用類似%{REQUEST_URI}的函數作爲RewriteCond的第一個參數。

回答

17

$1基本上是從字符串的開始和結束的所有內容。換句話說,$1 = (.*)

在您的重寫中,^表示字符串的開頭,(.*)表示匹配任何內容,而$表示字符串的結尾。所以,基本上,它是說從字符串的開頭到結尾抓取所有內容,並將該值分配給$ 1。

所以如果我輸入www.example.com/tacos-are-good,那麼$1 = "tacos-are-good"。所以你的結束重寫實際上是www.example.com/index.php/tacos-are-good

這裏有一張小抄的ModRewrite可能會有所幫助: http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet/

+2

所以$ 1這兩種情況下指的是相同的值呢? –

+1

是的。在'RewriteCond'中,它基本上是說只要$ 1不等於條件右邊列出的文件就會重寫。 – sbeliv01

6

$ 1表示跟隨它的正則表達式中第一組括號的匹配。 ($ 2將匹配第二組圓括號 - 如果給出)

例如,正則表達式匹配NOT「index.php」或「phpinfo.php」等任何東西。因此,重寫條件傳遞if請求的url不是其中的一個,然後將匹配的部分傳遞給重寫小節。