@pashjka

Как сделать редирект с .php на .html кроме страницы для отправки данных формы на почту?

что произошло:
яндекс вебмастер стал ругаться на дубли страниц, title, description. Основными дублями были .php страницы и .html
(сам сайт написан на .php). rel canonical не помогает.

что хочу:
склеить .php и .html страницы и показывать только .html

что было сделано:
на днях внес изменения в .htaccess для того, чтобы был редирект 301 с .php на .html

код:

RewriteEngine on  
RewriteBase /

RewriteCond %{THE_REQUEST} (.*)\.php  
RewriteRule ^(.*)\.php $1.html [R=301,L]  

RewriteCond %{THE_REQUEST} (.*)\.html  
RewriteRule ^(.*)\.html $1.php [L]


из-за чего на почту стали приходить пустые данные с форм обратной связи

подскажите, как корректировать правило в .htaccess?

сам .htaccess

ErrorDocument 404 /error404.html

#редирект с www на без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC]
RewriteRule ^(.*)$ https://site.com/$1 [R=301,L]

#убираем лишние слеши
RewriteCond %{REQUEST_URI} ^(.*?)\/{2,}(.*?)$
RewriteRule . %1/%2 [L,R=301]
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]

#ставим с index.php на /
RewriteCond %{REQUEST_URI} ^/index$ [OR]
RewriteCond %{REQUEST_URI} ^/index[.]+(\w+)$
RewriteRule . / [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ $1.php?%{QUERY_STRING} [L]

# если файл не существует, будет вызван index.php
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^.*$ index.php [L]

# прячем ошибки php от посетителей
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

# с php на html
RewriteEngine on  
RewriteBase /

RewriteCond %{THE_REQUEST} (.*)\.php  
RewriteRule ^(.*)\.php $1.html [R=301,L]  

RewriteCond %{THE_REQUEST} (.*)\.html  
RewriteRule ^(.*)\.html $1.php [L]
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
@dodo512
из-за чего на почту стали приходить пустые данные с форм обратной связи

Чтобы при отправке данные не терялись нужно в форме указать новый адрес уже с .html и без .php.
Ну или запросы методом POST оставить как есть, а редирект делать только для GET и HEAD.
spoiler
# редирект с www на без www
# и убираем лишние слеши
RewriteEngine On
RewriteCond %{THE_REQUEST} //  [OR]
RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC]
RewriteRule ^(.*)$ https://site.com/$1 [R=301,L]

RewriteRule ^index(\.\w+)?$ https://site.com/ [R=301,L]

RewriteCond %{THE_REQUEST} ^(GET|HEAD).+\.php
RewriteRule ^(.*)\.php https://site.com/$1.html [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ $1.php [L]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы