mod_rewrite спасает контент

Продолжая тему mod_rewrite, хочу направить ваше внимание на взаимодействие этого механизма с кодами состояния HTTP. Когда браузер пытается получить информацию с введённого url, то он получает от сервера набор http-заголовков и только потом требуемое содержание. Я не буду вдаваться в подробности какие именно заголовки передаются, поскольку нам важен только код состояния. Преславутая 404 это не что иное, как код состояния запроса. Но есть еще один код, который тоже будет интересен. Это 301


Он используется для перенаправления. То есть, чтобы пользователь всё-таки смог увидеть запрашиваемую информацию необходимо выполнить еще один переход. При этом первый запрос выдаст специальный http-заголовок с меткой Location:, а в нём уже будет находиться url с нужной вам информацией. Можно выстраивать цепочки перенаправлений : один запрос ссылается на другую страницу, которая снова ссылается на какую-нибудь страницу и.т.д. Но понятно, что такие фокусы лучше не делать, поскольку индексирование сайта может изрядно затянуться.
Теперь более подробно :
Код 404

Ну кто не видел эту ошибку, пожалуй нет таких людей 😉
Для пс это означает, что страницу с таким url не надо индексировать. Но большинство пользователей принимают код 404 как стандартную ошибку сервера apache. Но ошибку может выдавать не только сервер, можно сделать специальные страницы с этим кодом состояния.
Если вы удаляете страницу с сайта и при этом на неё ведут какие-то внешние ссылки, то поисковик может оставить её в индексе, поскольку такая страница имеет ссылочную ценность.
Оставляя такое дело на самотёк, получаются пустые страницы, которые находятся в индексе поисковика, и получается проблема дублированного контента. Поэтому удаляя страницы с сайта, убедитесь, что возвращается ошибка с кодом 404.

Код 301.
Означает, что контент насовсем уехал в другое место. Для нас еще главным свойством является то, что поисковики в данном случае ценность старой ссылки присвоят новой. Также pr должен перекочевать на новую страничку, но не сразу… Поэтому изменяйте url по острой необходимости.
Посмотрим как это бывает на практике.
Создайте два файла
Index.php

<?php
echo"что-то не так";
?>

Reindex.php

<?php
echo"перенаправление прошло успешно";
?>

И .htaccess

RewriteEngine On
RewriteRule ^index\.php$ /rewrite/reindex.php [R=301,L]

Если не нравится mod_rewrite, то можно свалить всё на плечи php. И сделать вот так:
В скрипте index.php явно задать перенаправление :

<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://localhost/rewrite/reindex.php');
?>

Теперь представим, что на сайт ведут несколько доменных имен, не знаю зачем это нужно, но такое бывает. Всё хорошо если б ссылки создавались только на один домен, но так как это в принципе нельзя контролировать, то проблема дублированного контента будет актуальной.
www.novice.net
www.novice.ru
www.novice.com
Надо перенаправить на www.i-novice.net два остальных домена.

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

В данном примере я использовал новую конструкцию условия для правила mod_rewrite.

RewriteCond %{HTTP_HOST} !^www\.novice\.net данная строчка проверяет введенное пользователем имя хоста, и если оно не равно www.novice.net, то происходит перенаправление.

Продолжая тему с доменными именами, всплывает проблема www. То есть когда сайт доступен как под www.site.ru и под site.ru. Если поисковик проиндексирует обе версии, обязательно будет дублированный контент.
Поэтому воспользуйтесь следующим правилом

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

В данном случае, если запрашивается site.ru, то происходит перенаправление на www.site.ru

Ну и последнее, что я хотел бы рассмотреть это url вида “/index.php” и “/”
Как вы наверно знаете, если web-сервер не может найти запрашиваемое имя файла, то по умолчанию выдаётся индексная страница. Что может снова привести к проблеме дублированного контента.

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

Теперь введя в адресной строке https://www.site.ru/index.php вас перенаправит на https://www.site.ru.





Читайте также:



4 Ответов на “mod_rewrite спасает контент”

  1. Теперь представим, что на сайт ведут несколько доменных имен
    [ссылка]
    [ссылка]
    [ссылка]
    Надо перенаправить на https://www.i-novice.net два остальных домена.

    Обычно для этого проще заказать у регистратора услугу веб-форвардинг (называемая также “URL-forwarding”, “Web-redirect” или “HTTP-redirect”) обеспечивает перенаправление HTTP-запроса к вашему доменному имени на страницу с другим адресом.

  2. Спасибо большое! 2-а дня искал решения данной проблемы

    RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html)\ HTTP
    RewriteRule ^(.*)index\.(php|html)$ /$1 [R=301,L]
    ПОМОГЛО. Было важно т.к. это выжный элемент в сео оптимизации

  3. Юра

    Переписал себе примерно 30-40 разных примеров c разных сайтов, но ни один не работает. У меня естественно :-)
    Я о преобразовании ссылки
    [ссылка] в [ссылка]. И для поисковиков и для строки в URL. Реально-ли удалить с URLа “index.php?page=” ?
    То есть для поисковиков и для посетителей
    [ссылка]
    а для сервера если после …ru/ нет index.htm?page= скрыто вставить и испольнить?
    Заранее благодарен.

  4. Юра

    Напишите пожалуйста Вашу цену за составлене файла htaccess и robot с пояснениями на основе моих определенных требований.


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map