Помощь .html .htaccess

Azarn1k

Постоялец
Регистрация
2 Сен 2012
Сообщения
165
Реакции
105
Друзья, такой вопрос. Были настроены страницы с .html - дале в настройках сео убрали .html - Сейчас очень много 404 страниц. Подскажите как сделать так что бы если у человеке в адресе страница /site.html то его перенаправляло на /site
 
престашоп здесь совершенно непричем. первый ответ в гуглевиче по запросу Для просмотра ссылки Войди или Зарегистрируйся
 
Друзья, такой вопрос. Были настроены страницы с .html - дале в настройках сео убрали .html - Сейчас очень много 404 страниц. Подскажите как сделать так что бы если у человеке в адресе страница /site.html то его перенаправляло на /site
В .htaccess напишите следующие правила:
Код:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} .+\.html [nc]
RewriteRule (.*)\.html http://site.com/$1 [R=301,L]
Если первые 2 строчки в Вашем htaccess уже имеются (а это наверняка так), вставьте 3 и 4 правила сразу после них.
 
В .htaccess напишите следующие правила:
Код:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} .+\.html [nc]
RewriteRule (.*)\.html http://site.com/$1 [R=301,L]
Если первые 2 строчки в Вашем htaccess уже имеются (а это наверняка так), вставьте 3 и 4 правила сразу после них.

А можно это сделать для всех доменов сразу (без site.com)? Или надо отдельно прописывать для каждого домена?
 
А можно это сделать для всех доменов сразу (без site.com)? Или надо отдельно прописывать для каждого домена?
Можно ;)
Код:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} .+\.html [nc]
RewriteRule (.*)\.html http://%{HTTP_HOST}/$1 [R=301,L]
 
Можно ;)
Код:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} .+\.html [nc]
RewriteRule (.*)\.html http://%{HTTP_HOST}/$1 [R=301,L]
Подскажите пожалуйста, у меня Prestashop раз в несколько дней почему то перегенерирует этот файл. И опять вылазят 404. Приходится постоянно следить и в ручную его прописывать, может быть есть другие методы?
 
Подскажите пожалуйста, у меня Prestashop раз в несколько дней почему то перегенерирует этот файл. И опять вылазят 404. Приходится постоянно следить и в ручную его прописывать, может быть есть другие методы?
Пара слов о хорошем:
На нативном php эту задачу можно решить добавив в начале индексного файла вот такой код:
Код:
<?php
if(preg_match('~.+\.html$~', $_SERVER['REQUEST_URI']))
{
   header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '.html', true, 301);
   exit();
}
?>
В данном случае под индексным файлом я подразумеваю первый файл, который выводит какие-либо данные. Если первым файлом включается не index.php, а header.php - код нужно добавлять именно в него.
Обращаю внимание на то, что данный код будет работать "правильно" если на сайте не используются параметры. Если используются - будет дописываться в конец параметров .html . Поэтому для работы с параметрами нужно писать правило с preg_replace и для написания нормальной переадресации - нужно писать правила по живому параллельно тестируя их. В общем то всё не сложно было бы, НО:

пара слово плохом:
коль мне не изменяет память - престашоп использует шаблонизатор smarty, а он не шибко дружит со вставкой php-костылей в файлы темплейтов...
Я теоретически представляю как нужно поправить код, что б он заработал, но ввиду небольшого опыта работы со смарти - могу где-то ошибиться и код не будет срабатывать. Как уже говорилось - желательно проводить тесты по живому проекту...
Собственно 3 варианта как добавить адаптированный код. Его нужно вставить в тот *.tpl , который грузится первым (вроде header.tpl)
1:
Код:
{if preg_match('~.+\.html$~', $_SERVER['REQUEST_URI'])}
    {header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '.html', true, 301);}
    {exit();}
{/if}
2:
Код:
{literal}
<?php
    if(preg_match('~.+\.html$~', $_SERVER['REQUEST_URI']))
   {
      header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '.html', true, 301);
      exit();
   }
?>
{/literal}
3:
Код:
{php}
    if(preg_match('~.+\.html$~', $_SERVER['REQUEST_URI']))
   {
      header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '.html', true, 301);
      exit();
   }
{/php}
И опять же - если на сайте есть страницы с параметрами - их нужно будет обрабатывать дополнительно. В случае с htaccess никаких танцев с бубном не требовалось. Если ведется контекстная реклама со ссылками с utm метками - нужно править условие if что б не учитывало страницы с параметрами, например вот так:
Код:
<?php
if(preg_match('~.+\.html$~', $_SERVER['REQUEST_URI']) && $_SERVER['QUERY_STRING'] == '')
{
   header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '.html', true, 301);
   exit();
}
?>
Но это правило решит вопрос с параметрами контекстной рекламы (это если изначально там настроены нормально URL адреса в кампании), но не решит вопросов других страниц, которые юзают параметры.

PS: извиняюсь, если описал не понятно. Если что - уточняйте ;)
 
Последнее редактирование:
Подскажите пожалуйста, у меня Prestashop раз в несколько дней почему то перегенерирует этот файл. И опять вылазят 404. Приходится постоянно следить и в ручную его прописывать, может быть есть другие методы?


# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again

Даже если над этой строкой свой код вставлять?
 
# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
Зашел на один из клиентских проектов на престе - кастомный код висит над этой строчкой и ничего не удаляется...
 
Назад
Сверху