如果前面的規則匹配的最後一條規則將永遠不會得到應用。假設http://domain.com/2010/10/postname/請求與文件或目錄不匹配,RewriteRule . /index.php [L]
將重寫URI到/index.php
,因此它永遠不會達到您的規則。建議您升級您的規則上,僅低於RewriteBase /
,並複製-f/- d條件,使其看起來像這樣:!
RewriteBase/
# for 301 redirect
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/[0-9]{4}/[0-9]{2}/(.+)$ /$1 [NC,R=301,L]
# the rest of the rules
RewriteRule ^atom.xml$ feed/ [NC,R=301,L]
RewriteRule ^rss.xml$ feed/ [NC,R=301,L]
RewriteRule ^rss2.xml$ feed/ [NC,R=301,L]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/handle [R=302,NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
而且,如果這是在.htaccess文件,您需要刪除斜線的規則匹配,使它看起來像這樣:^[0-9]{4}/[0-9]{2}/(.+)$
請注意,重定向在IE中完全不起作用,我相信Firefox可能會以某種方式緩存重定向。 – Astron 2011-12-22 05:43:20