Нет ничего быстрого и легкого.
Настройка
Сначала убедитесь, что у вас установлен пакет
Чтобы использовать mod_rewrite, вам нужно загрузить расширение. Обычно это делается путем добавления модуля rewrite.so в глобальную конфигурацию apache2 (/etc/apache2/apache2.conf
)
Обычно все инструкции mod_rewrite записываются в определении виртуального хоста. (Скажите: /etc/apache2/site-available/000default
)
Использование
Первый шаг
Чтобы включить перезапись для одного сайта, вы должны запросить его с помощью:
RewriteEngine On
Тогда вы можете начать писать правила. Основные правила, которые вам нужно написать, описываются следующей схемой:
(См. Также: Как работает перезапись URL? )
Чтобы помочь мне понять, как это работает, всегда рассматривайте это со стороны сервера (а не со стороны клиента).
Вы получаете URL от клиента. Этот URL имеет определенный формат, который вы определили. (Например, http://blog.com/article/myarticle-about-a-certain-topic
). Но Apache не может понять это сам, поэтому мы должны помочь ему. Мы знаем, что контроллер page.php
и может искать статью по имени.
Получение информации
Так что теперь мы подделываем regex
для извлечения информации из URL. Все регулярные выражения сопоставляются с тем, что следует за вашим доменным именем (здесь: article/myarticle-about-a-certain-topic
без первого /
- это можно записать, хотя в последней версии переписать)
Здесь нам нужно название статьи: ^article/(.*)$
выполнит работу по сопоставлению URL с article/<something>
и захвату <something>
в $1
. (Что касается символов, я советую вам посмотреть учебник по регулярным выражениям. Здесь ^ - начало строки, невидимая позиция после .com/
и $ конец URL)
Так что теперь нам нужно сообщить apache, что этот URL означает http://myblog.com/page.php?article=myarticle-about-a-certain-topic
Это достигается с помощью RewriteRule
RewriteRule ^article/(.*)$ page.php?article=$1
Ограничение условиями
Чтобы немного углубиться в предварительные темы, вы можете применить это правило, только если название статьи выбирается методом GET. Для этого вы можете включить RewriteCond
как
RewriteCond %{REQUEST_METHOD} GET
Он идет ДО RewriteRule
в файле, но проверяется ПОСЛЕ этого.
Флаги
Если вы делаете много переадресации / перезаписи, вам нужно понимать flags
Наиболее используемыми являются [L]
и [R]
. Небольшое объяснение тем:
[R]
запросить перенаправление, его можно настроить как [R=302]
, где 302 - это номер состояния перенаправления протокола HTTP. Это заставит клиента сделать новый запрос с переписанным URL. Поэтому он увидит переписанный URL в своей адресной строке.
[L]
заставляет apache прекратить обработку правил. Имейте в виду, что это означает, что текущий входящий URL-адрес перестанет быть измененным, но переписанный URL-адрес WILL снова пройдет процесс перезаписи. Имейте это в виду, если вы хотите избежать петель.
Заключение
Таким образом, вы получите следующий блок инструкций
RewriteEngine On
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^article/(.*)$ page.php?article=$1
Смотри также
Вы можете найти дополнительные ресурсы здесь: