2010-09-27 65 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