的<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/
是的,但什麼是'的的index.php /某事/ else'意思? – DotNetStudent 2012-03-29 22:03:51
Apache將調用index.php,但該腳本將做一些工作來從$ _SERVER [] superglobal中提取其他東西 – 2012-03-29 22:05:43