RewriteRule (для удаления.php) и старый редирект 301 не работает?

У меня нет опыта в редактировании.htaccess

я хотел

  1. перенаправить не-www на www.

  2. удалить расширение.php

  3. настроить пользовательскую страницу 404

Мне удалось это сделать (в поисках решения в Интернете и на faultserver.ru), но теперь кажется, что мой старый редирект 301 с расширением.php больше не работает:

redirect 301 /download.php /features.php

как я мог это решить? Спасибо!

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC]
RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC]

RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule . %{REQUEST_URI}.php [L]

Options +FollowSymlinks
ErrorDocument 404 /404
RewriteEngine on 

1 ответ

Вам нужно добавить флаг PT к вашему RewriteRule:

RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule . %{REQUEST_URI}.php [PT]

Причина в том, что подстановка в RewriteRule обычно считается путем к файлу, а не uri, и, таким образом, такие директивы, как Redirect и т. Д., Не применяются. PTflag (pass through) сообщает apache, что нужно рассматривать правила перезаписи как uri и продолжать применять правила отображения uri.

Другие вопросы по тегам