.htaccess Правило перезаписи для удаления расширения не работает?

#.htaccess #mod-rewrite

Вопрос:

Я не понимаю, почему это не работает. Он должен взять любую страницу с расширением .htm и удалить ее. Это будет страница на сайте WordPress. Но когда это запустится,. htm останется и получит 404. Что я упускаю?

 RewriteEngine On
# there is an existing rule here that works fine with [R=301,L]
# but the following rule isn't working?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/([^./] ).htm$ /$1/ [R=301,L]
 

Этот работает:

 RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*).htm$ $1/ [R=301,L]
 

Комментарии:

1. Удалить / после ^

2. Как утверждает @anubhava, вам необходимо сопоставить относительные пути, если вы реализуете a RewriteRule в распределенном файле конфигурации. Причина четко указана в документации: «В контексте для каждого каталога (Каталог и .htaccess) шаблон сопоставляется только с частичным путем, например запросом «/app1/index.html» может привести к сравнению с «app1/index.html» или «index.html» в зависимости от того, где определен рерайтер».