2012-03-29 104 views
0

我需要一些幫助來確定以下URL重寫規則的含義。我可以理解前三行,但我陷入了index.php/$1部分。在這個規則中,/究竟意味着什麼?我總是希望在文件名後看到的唯一事情是查詢字符串分隔符(?)。這是我第一次看到/作爲分隔符。這究竟意味着什麼?PHP和URL重寫

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 

    RewriteRule ^(.*)$ index.php/$1 [PT,L]  
</IfModule> 

回答

6

<IfModule mod_rewrite.c>...</IfModule>塊確保所包含withing塊一切僅當mod_rewrite考慮模塊被加載。否則,您將面臨服務器錯誤,或者所有URL重寫請求都將被忽略。

以下兩行是跟在它們後面的RewriteRule行的條件。這意味着只有滿足這兩個重寫條件,RewriteRule纔會被認可。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

條件只是聲明只有當請求的URI不是類型「現有文件」或文件夾時纔會進行重寫。換句話說,如果所請求的文件/文件夾實際上存在於所請求的服務器路徑上,則它將被服務,否則重寫將被執行。

最後一行將做實際的重寫。它將採取任何跟隨該網站的域名,並將其附加在重寫的請求中,該請求將以index.php/開始。

這裏是一個例子。

假設您要求以下URL - example.com/example-page.html

如果在名爲example-page.html的虛擬主機根文件夾中沒有現有文件或文件夾,則最後的重寫規則實際上會請求以下URI example.com/index.php/example-page.html

通常的原因做這樣的東西是接收請求的Web應用程序的方式設計了一箇中央引導文件是負責處理所有的請求(在這裏它的index.php

編輯:在我看來,這是一個非常好的初學者友好教程mod_rewrite

http://net.tutsplus.com/tutorials/other/a-deeper-look-at-mod_rewrite-for-apache/

2

這只是重寫URL名稱。

例如,此URL:

http://www.example.com/something/else 

將是相同的:

http://www.example.com/index.php/something/else 
+0

是的,但什麼是'的的index.php /某事/ else'意思? – DotNetStudent 2012-03-29 22:03:51

+3

Apache將調用index.php,但該腳本將做一些工作來從$ _SERVER [] superglobal中提取其他東西 – 2012-03-29 22:05:43