2010-09-27 63 views
1

重寫規則,這是我的htaccess文件:htaccess的呼籲一切

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

# Static pages 
RewriteRule ^print/([0-9]+)$ index.php?action=PublicDisplayPrint&page_id=$1 [L,QSA] 
RewriteRule ^email/([0-9]+)$ index.php?action=PublicDisplayEmail&page_id=$1 [L,QSA] 
RewriteRule ^login$ index.php?action=PublicDisplayLogin [L,QSA] 
RewriteRule ^search$ index.php?action=PublicDisplaySearch [L,QSA] 
RewriteRule ^feedback$ index.php?action=PublicDisplayFeedback [L,QSA] 
RewriteRule ^sitemap$ index.php?action=PublicDisplaySitemap [L,QSA] 

# Dynamic pages 
RewriteRule ^(.*)$ index.php?action=PublicDisplayPage&url=$1 [L,QSA] 

這似乎是調用上的任何文件的動態頁面規則(logo.gif例如),所以它似乎並沒有運行第二和第三行。有任何想法嗎?

回答

4

一個RewriteCond directive的條件並不只屬於第一以下RewriteRule directive。所以在這種情況下,兩個RewriteCond條件只適用於第一個RewriteRule而不適用於其他規則,特別是不適用於最後一條規則。

所以就把RewriteCond指令立即在最後RewriteRule指令前:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?action=PublicDisplayPage&url=$1 [L,QSA] 
1

RewriteCond唯一以讓你的最後7條規則將被應用到任何請求下一以下RewriteRule都適用。

你可以重複上述條件對於每個規則,把它放在最後一條規則或放一個明確的規則,以服務內容爲(這是更靈活,因爲允許您添加後動態的規則):

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
#If it's a file or directory, serve as is, without rewriting 
RewriteRule^- [L] 

#Rest of the rules