Осмысленные линки и mod_rewrite.

Ссылки… В Seo это слово, пожалуй, одно из самых популярных. Все за ними гоняются, все на них равняются. И все хотят хорошие ссылки! И я хочу, и вы, уверен, тоже хотите.
Нет. Данная статья не про то, как нахаляву получить 100 линков с pr10. Я хочу рассказать, как получить ссылки в прекрасном виде. Чтобы каждому захотелось по ним щелкнуть.
Для начала, определимся, что url бывают динамические и статические.

Вот пример статического url:

   https://www.site.com/page.html.

Все просто и понятно.
А это уже динамический url:

   https://www.site.com/index.php?page=1&category=5

Выглядит он не очень красиво, по сравнению с первым вариантом. Но проблема не только в отсутствии эстетичности. Поисковики не очень любят такие url.

Во-первых, поисковик может “обнаружить” у вас дублированный контент, вследствие манипуляций с параметрами адресной строки, и при большом количестве таких недоразумений ваш сайт могут принять за источник спама и оштрафовать. Или попросту не проиндексировать данную страницу, особенно если url будет содержать много параметров.

Но и о пользователях не надо забывать. Они скорее выберут url, который выглядит более красиво и понятно, нежели набор вопросов и странных параметров.
Ну, что-то я говорю и говорю. Давайте перейдем к делу. Если вы следовали моим советам по выбору сервера и установили Денвер, то mod_rewrite у вас уже есть. Зайдите в httpd.conf и найдите там строчку

   LoadModule rewrite_module modules/mod_rewrite.so

Если перед ней стоит символ #, то вам надо его убрать. Тем самым apache будет подгружать модуль при запуске.
В чём же суть этого mod_rewrite. С его помощью можно задать правила, которые будут преобразовывать релевантную адресную строку, введенную пользователем в строку, которую уже будет обрабатывать php сценарий.

Чтобы начать работу, создайте в корне папки (у меня она называется rewrite) тестируемого сайта файл .htaccess и разместите в нём следующий код:

   RewriteEngine On
   RewriteRule ^my_page\.html$ /rewrite/index.php?status=555

Обратите внимание, если скрипт у вас лежит в папке localhost/www/script, то её надо указать, как я указал /rewrite… так как apache будет по умолчанию искать её в корне папки /www/

Затем в index.php поместите следующее:

<?php

    if ($_REQUEST['status'] == 555)
        echo "Ура это работает :)";
    else
        echo "попробуйте еще разок";

?>

Теперь введите в адресную строку https://localhost/rewrite/my_page.html
И вы будете приятно удивлены 😉

Строчка

   RewriteEngine On

Разрешает работу механизма mod_rewrite.
Вторая устанавливает правило подмены, которое как вы уже поняли, строится на регулярных выражениях. Не зря я и писал о них 😉

Теперь усложним задачу.
Представим, что на сайте 1000 страниц

   index.php?page_id=1
   index.php?page_id=2

И надо привести их в вид

   a1.html
   a2.html

Не писать же для каждой страницы отдельное правило?
Естественно нет, можно сделать только один шаблон.

Исправьте правило следующим образом

   RewriteEngine On
   RewriteRule ^a([0-9]*)\.html$ /rewrite/index.php?status=$1

И index.php

<?php
    echo "вы сейчас на странице номер ".$_REQUEST['status'];
?>

   RewriteRule ^a([0-9]*)\.html$ /rewrite/index.php?status=$1

В данном случае шаблон преобразовывает адресную строку вида

   aX.html в index.php?status=X

На этом примере возможности mod_rewrite я хочу пока остановиться, так как такую сложную и обширную тему за раз понять невозможно. Как изучу остальные приёмы, обязательно напишу 😉





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



10 Ответов на “Осмысленные линки и mod_rewrite.”

  1. Тема ооочень интересная. Вот еще более интересно было бы узнать как делать самому такие удобочитаемые урлы как, например, в вордпрессе. Где-то что-то подобное встречал, но как-то заумно написано, хотелось бы попроще, подоступнее, ну, короче, в твоем стиле :) .

  2. novice

    Учту твоё пожелание, когда буду писать следущий пост про mod_rewrite 😉

  3. Своему парню обязательно перескажу :)

  4. Faust

    Весьма доступно изложено) Автору спасибо)

  5. Коол - когда допишу свой движок - обязательно вернусь к этой теме )

  6. madson

    [ссылка]

    Чтобы получить урл следующего вида . Можно прописать следующее:

    RewriteEngine On
    RewriteRule article/ article.php

    Если нужно передать еще переменные то можно написать так:
    [ссылка]

    RewriteRule article/(\d+)/? article.php

  7. обычно так и делаем…;))

  8. [IGOS]

    А вот как правильно описать правило для такой задачи:

    есть сайт:
    domen.ru с подразделами /1/, /2/, /3/
    domen.ru/1/
    domen.ru/2/
    domen.ru/3/

    необходимо чтобы при заходе в раздел в строке адреса отображалось: 1.domen.ru/ а контент был из domen.ru/1/
    соответственно при запросе 1.domen.ru адрес оставалля прежним а контент грузился из domen.ru/1/

  9. 2[IGOS]:
    Такие вещи делаются уже совместной настройки apache и htaccess.

  10. Вопрос по теме.
    Например адресная строка выглядит так:
    reklama-ru.cz/index.htm?page=dir1/dir2/file1.htm
    reklama-ru.cz/ - 1 часть
    index.htm?page= - 2 часть
    dir1/dir2/file1.htm (или любой другой путь) - 3 часть

    Как для поисковика или для обозначения читаемой ссылки, например в поисковике по запросу, дать такой URL состоящий только из 1 и 2 части: reklama-ru.cz/dir1/dir2/file1.htm без index.htm?page=
    но как только по этой ссылке пользователь переходит на мой сай (или набирает этот адрес в адресной строке) htaccess проверяет есть-ли после cz/ строка “index.htm?page=” и если ее нет подставляет ее. Потом добавляет все остальное.
    И вообще возможны-ли (и оправданы-ли) такие ухищрения.


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