Почему важны URL?
Статические URL и динамические URL
Статические URL
Динамические URL
URL-адреса и CTR
URL-адреса и дублированный контент
URL-адреса в реальном мире
Пример 1: динамические URL-адреса
Пример 2: числовая подмена в URL-адресах
Пример 3: URL-адреса со вставленными ключевыми словами
Поддержка согласованности URL-адресов
Подмена URL
Инсталляция mod_rewrite

Тестирование mod_rewrite

После инсталляции и активизации mod_rewrite можно добавлять правила подмены в конфигурационный файл Apache httpd.conf. Apache позволяет также сохранять параметры конфигурации (в том числе и правила подмены) в конфигурационных файлах .htaccess,находящихся в различных каталогах. Нужно лишь создать файл с именем .htaccess в каталоге вашего приложения, и Apache втоматически прочтет его при доступе к этому каталогу.
Как и модуль mod__rewrite, файл .htaccess не имеет никакого отношения к РНР. Это просто конфигурационный файл Apache. Принципы его работы описаны в приведенном ниже упражнении.
Применение файла .htaccess полезно в описанных ниже ситуациях.
• У вас нет доступа к глобальному конфигурационному файлу httpd.conf (такое обычно бывает при совместном хостинге).
• Нужно иметь специальные конфигурационные параметры для конкретного каталога приложения.
• Нужно иметь возможность изменять параметры конфигурации без перезапуска Apache. После изменения файла httpd.conf перезапускать Apache необходимо, а это не желательно, если на Web-сервере выполняются производственные приложения.
Все упражнения в данной книге рассчитаны на работу с файлом .htaccess.Этот метод мы обычно рекомендуем для определения правил подмены, особенно на этапе разработки, когда правила изменяются часто. Так можно избежать перезапуска Apache при каждом изменении правила подмены. А в среде совместного хостинга это единственное решение, поскольку в этом случае у вас нет ни доступа к файлу httpd.conf, ни возможности перезапускать сервер.
В приведенном ниже упражнении вы создадите простое правило подмены, которое преобразовывает my-super-product.html в product.php?product_id=123.Именно эта ситуация была представлена на рисунке
Сценарий product.php предназначен для моделирования реальной страницы с описанием товара. Он принимает из строки запроса параметр с именем product__id и в зависимости от значения этого параметра генерирует очень простое выходное сообщение.

На рисунке показан пример выходных данных, которые будут получены при загрузке страницы http://seophp.example.com/product.php?product_id=123.
Для большей подстройки под поисковые механизмы необходимо иметь возможность обращаться к этой же странице с помощью статического URL: http://seophp.example.com/my-super-product.html. А для этого необходим — ой, как вы догадались? — mod_rewrite.
Как известно, основное, что делает mod_rewrite — преобразование входной строки (URL, введенный посетителем) в другую строку (URL, который могут обработать ваши РНР-сценарии).
В данном упражнении он будут заменять строку my-super-product.html на product.php?product_id=123.
httpd.conf и .htaccess
Обработка правил для mod_rewrite в Apache слегка отличается в .htaccess и httpd.conf.
Если по какой-то причине вы предпочтете работать с httpd.conf, то при выполнении упражнений учтите следующее.
1. Правила подмены необходимо поместить не в файл .htaccess, а в элемент файла httpd.conf или vhosts.conf.
2. При работе с httpd. conf слэш ( / ) , следующий за доменным именем в URL, считается частью URL.
В следующем упражнении представлен код подмены URL:
RewriteEngine On
RewriteRule Amy-super-product\.html$ /product.php?product_id=123
При использовании httpd. conf правило должно содержать дополнительный слэш:
RewriteEngine On
RewriteRule Vmy-super-product\.html$ /product.php?product_id=123
В данном упражнении, как и во всех других упражнениях в этой книге, предполагается, что
Apache и РНР инсталлированы у вас так, как указано в главе 1.
Обновления и дополнительная информация по приведенному ниже коду могут содержаться
на Web-странице Джейми Сировича, посвященной данной книге:
http://www.seoegghead.com/seo-with-php-updates.html
Тестирование mod_rewrite
1. Создайте в своей папке seophp файл с именем product.php и добавьте в него следующий код:
<?php
// вывод информации о продукте
echo ' Вы выбрали продукт №' . $_GET [' product_id1 ] ;
?>
2. Проверьте этот простой сценарий, загрузив адрес http://seophp.example.com/
product.php?product_id=3. Результат должен быть такой, как на рисунке.
3. Создайте в папке seophp файл с именем .htaccess и добавьте в него следующие
строки. Их назначение будет объяснено в последующем разделе.
RewriteEngine On
# Преобразование my-super.product.html в /product.php?product_id=123
RewriteRule Amy-super-product\.html$ /product.php?product_id=123
Здесь стоит упомянуть об одной тонкости. Файл .htaccess технически является файлом с пустым именем и расширением htaccess. В зависимости от настроек вашей системы Windows этот файл может оказаться невидимым в проводнике Windows.
4. Вернитесь в браузер, и на этот раз введите адрес http://seophp.example.com/my-super-product.html. Если все работает так, как надо, то вы должны увидеть выходные данные, приведенные на рисунке.

Выходные данные при загрузке страницы http://seophp.example.com/my-super-product.html
Если на данном этапе вы получите ошибку сервера, то, скорее всего, модуль mod_rewrite неправильно активизирован. После активизации mod__rewrite в файле httpd. conf сервер Apache обязательно должен быть перезапущен. Подробную информацию об ошибке можно увидеть в файле error.log, который находится в каталоге журналов Apache.
Поздравляем! Вы только что сделали первый шаг в мир mod_rewrite! Этот пример,конечно, очень простой и не имеет серьезного практического значения — по крайней мере, по сравнению с тем, что вы узнаете позже! Но вначале вы должны полностью разобраться в основах подмены URL.
Вы начали с создания очень простого PHP-сценария, который принимает из строки запроса числовой параметр. Нетрудно представить, что это более полезная страница, которая выводит большой объем информации о продукте с идентификатором,указанным в параметре строки запроса productld, но в нашем случае она просто выводит текстовое сообщение, которое подтверждает, что идентификатор корректно введен из строки запроса. Сценарий product. php на самом деле невероятно прост!
Вот еще раз его код:
<?php
// вывод информации о продукте
echo 'Вы выбрали продукт №' . $_GET['product_id'];
?>
Этот сценарий вполне понятен, даже если вы относительно недавно начали работать
с РНР. Команда echo выводит текст, a $_GET [product_id] указывает PHP выбрать
значение product_id, содержащееся в строке запроса.
Визуальный пример интерпретации предопределенных серверных переменных показан на рисунке
После проверки работоспособности сценария product.php было выполнено еще одно обращение к этому же сценарию, но с помощью URL-адреса, который физически не существует на сервере. Это было сделано с помощью подмены URL, а именно — с помощью добавления правила, которое брабатывается модулем mod_rewrite.
Файл .htaccess, созданный вами в папке phpseo, содержит две строки. Первая из них разрешает работу механизма подмены URL: RewriteEngine On

Введение в регулярные выражения
Подмена URL и PHP
Подмена числовых URL с двумя параметрами
Подмена URL с ключевыми словами
Создание генератора ссылок
Разбиение на страницы и подмена URL
Подмена изображений и потоковых носителей
Проблемы, которые подмена не может решить
Последнее предостережение
Резюме
Используются технологии uCoz