2010-09-03 96 views
1

我有這樣的規則會被重定向沒有在他們.所有請求index.php,並能正常工作:問題與多個重寫規則

# Redirect all page requests to content handler 
RewriteRule ^([^.]*)$ index.php [L] 

現在我也想禁止任何請求在原始URL包含.php。當我添加另一個這樣的規則(第一個)之後,第一個規則遊:

# Disallow access to PHP files 
RewriteRule \.php 404.php [L] 

我認爲增加[L]到的第一條規則將停止從正在執行的第二條規則,但似乎都沒有效果:從所述第一規則(即index.php)的輸出相匹配的第二條規則和所有請求在404.php結束。我在這裏做錯了什麼?

回答

2

[L]的意味着沒有多個規則此請求處理,但整個路徑被再次觸發正在處理時的index.php。嘗試添加一個新的規則,使404規則只有在請求的頁面不是index.php時纔會觸發,如下所示:

# Disallow access to PHP files 
RewriteCond %{REQUEST_FILENAME} !=index.php 
RewriteRule \.php 404.php [L] 
+0

謝謝,我的工作內容與您的示例類似。我沒有意識到每個規則都會引發新的請求。還有一件事:有沒有辦法判斷一個URL是原來的一個或重寫一個?這樣我可以防止用戶直接訪問'index.php'。 – casablanca 2010-09-03 19:53:44

+0

呀,看看mod_rewrite的參考,有一個爲子請求的測試。 – zigdon 2010-09-03 20:03:16