Статические 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
Подмена изображений и потоковых носителей
Проблемы, которые подмена не может решить
Последнее предостережение
Резюме