Назад | Перейти на главную страницу

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

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

я хотел

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

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

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

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

перенаправить 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 

Вам нужно добавить флаг 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.