如果前面的规则匹配的最后一条规则将永远不会得到应用。假设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