我想使用mod_rewrite將一些人性化的URL改寫成名爲php
(它位於web根目錄中,因爲mod_rewrite顯然不會讓您重寫爲web根目錄之外的文件)中的任意文件。如何防止mod_rewrite多次重寫URL?
/ --> /php/home.php
/about --> /php/about_page.php
/contact --> /php/contact.php
這裏是我的重寫規則:
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^$ php/home.php [L]
RewriteRule ^about$ php/about_page.php [L]
RewriteRule ^contact$ php/contact.php [L]
不過,我也希望阻止用戶從這個php
目錄直接訪問文件。如果用戶輸入任何 URL以/php
開頭,我希望他們得到一個404頁面。
我嘗試添加在最後這個額外的規則:
RewriteRule ^php php/404.php [L]
...(其中404.php是輸出404頭和一個「未找到」消息的文件)
但當我訪問/
或或/ contact
時,我總是被重定向到404。看來最終的RewriteRule甚至適用於內部重寫的URL(因爲它們現在都以/php
開頭)。
我認爲[L]
標誌(在前三個RewriteRules上)應該阻止應用更多規則?難道我做錯了什麼? (或者是有一個更聰明的方式做我想要做什麼?)
但是,這正是我想要的,在這裏結束重寫過程。我說我*不希望它在匹配後繼續應用後續規則。但是最終規則總是被執行,即使之前的規則(帶有[L]標誌)已經被執行。爲什麼? – callum