Последнее правило никогда не будет применено, если предыдущее правило совпадает.Предполагая, что запрос 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}/(.+)$