这是我的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),因此它似乎没有运行第2行和第3行。有什么想法吗?
答案 0 :(得分: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 :(得分:1)
RewriteCond
仅适用于下一个RewriteRule
,因此您的最后7条规则将适用于任何请求。
您可以为每个规则重复条件,将其放在最后一条规则上,也可以使用明确的规则按原样提供内容(这样更灵活,因为您可以在以后添加更多动态规则):
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