Осмысленные линки и 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 поместите следующее:
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
echo "вы сейчас на странице номер ".$_REQUEST['status'];
?>
RewriteRule ^a([0-9]*)\.html$ /rewrite/index.php?status=$1
В данном случае шаблон преобразовывает адресную строку вида
aX.html в index.php?status=X
На этом примере возможности mod_rewrite я хочу пока остановиться, так как такую сложную и обширную тему за раз понять невозможно. Как изучу остальные приёмы, обязательно напишу 😉
Тема ооочень интересная. Вот еще более интересно было бы узнать как делать самому такие удобочитаемые урлы как, например, в вордпрессе. Где-то что-то подобное встречал, но как-то заумно написано, хотелось бы попроще, подоступнее, ну, короче, в твоем стиле .
Учту твоё пожелание, когда буду писать следущий пост про mod_rewrite 😉
Своему парню обязательно перескажу
Весьма доступно изложено) Автору спасибо)
Коол - когда допишу свой движок - обязательно вернусь к этой теме )
[ссылка]
Чтобы получить урл следующего вида . Можно прописать следующее:
RewriteEngine On
RewriteRule article/ article.php
Если нужно передать еще переменные то можно написать так:
[ссылка]
RewriteRule article/(\d+)/? article.php
обычно так и делаем…;))
А вот как правильно описать правило для такой задачи:
есть сайт:
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/
2[IGOS]:
Такие вещи делаются уже совместной настройки apache и htaccess.
Вопрос по теме.
Например адресная строка выглядит так:
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=” и если ее нет подставляет ее. Потом добавляет все остальное.
И вообще возможны-ли (и оправданы-ли) такие ухищрения.