Ниже рассмотрим несколько вопросов:
1. Как включить mod_rewrite на Apache?
2. Немножко теории. Как работает mod_rewrite.
3. Простой пример.
4. Что надо сделать в скрипте?
5. Что дает данный подход и mod_rewrite в целом?
6. Возможные ошибки.
7. Альма-Матер дл изучения mod_rewrite
1. Как включить mod_rewrite на Apache?
Для включения mod_rewrite на веб-сервере Apache необходимо отредактировать файл httpd.conf.
Для этого открываем файл httpd.conf, ищем строчку:
Код |
#LoadModule rewrite_module modules/mod_rewrite.so |
И убираем комментарий
Код |
LoadModule rewrite_module modules/mod_rewrite.so |
После чего перезапускаем веб-сервер.
2. Немножко теории. Как работает mod_rewrite.
Как правило, только что столкнувшиеся с mod_rewrite, программисты не понимают до конца как работает данный механизм. Из-за этого долгое время ломают голову над «детскими ошибами.
Итак. Как мы знаем есть, так называемый GET запрос, т.е. http://example.com/2005/12/31/theme.html , который «приходит» на веб-сервер (в нашем примере - Apache). Что делает сервер. Первым делом он смотрит настройки данного хоста. После чего уже принимает решение, что делать дальше. Либо отправить пользователю обратно содержимое заглавной страницы (index.html, к примеру) или отправить на интерпретацию код заглавного скрипта index.php или вернуть ошибку 404 и т.д. и т.п.. Предположим, что у нас дальше пойдет работа с index.phtml. Что будет дальше вы уже наверняка знаете. Мы же остановимся на том моменте, когда сервер смотрит настройки хоста. Их может быть большое множество. Но в обязательном порядке сервер пытается найти в корне файл.htaccess. (файл конфигурации Apache «на лету»). Вот именно в этом файле находятся правила преобразования mod_rewrite (они могут находиться и в httpd.conf). Т.е. я все веду к тому, что преобразование URL’ов ведется ДО работы скриптов.
Алгоритм следующий:
1. Сервер получает GET запрос: http://example.com/2005/12/31/theme.html
2. Находит в.htaccess правила преобразования mod_rewrite.
3. Преобразовывает.
4. Перенаправляет на index.phtml согласно правилам преобразования.
5. Скрипт начинает работать.
3. Простой пример.
Многие из вас видели такую вещь: http://example.com/2005/12/31/theme.html . Такие адреса часто используют новостные сайты. Естественно у них нет всех этих папок и html файлов. Все данные обрабатывает скрипт. Ниже мы рассмотрим один из вариантов такого преобразования. Скажу сразу. Вариантов уйма я лишь беру один частный случай, которым сам пользуюсь и считаю его наиболее универсальным.
Код |
RewriteEngine on Options +FollowSymlinks RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.phtml |
Рассмотрим все по порядку.
Два подряд RewriteCond это условия, между которыми стоит И.
Т.е. Если запрашиваемый адрес не является реально существующим файлом или каталогом перекидываем на index.phtml. Т.е. таким образом мы реализовали то, что у нас запросы http://example.com/2005/12/31/theme.html будут обрабатываться скриптом index.phtml. Теперь весь вопрос, как нам узнать в скрипте что пользователь запрашивает /2005/12/31/theme.html.
Тут лирическое отклонение. Несколько слов о RewrtiterRule. Директива рассматривает параметра. Первый (в нашем случае: ^(.*)$) – строка регулярного выражения, которая проверяет, удовлетворяет ли запрашиваемый адрес (в нашем случае: /2005/12/31/theme.html) паттерну (в нашем случае да, т.к. паттерн гласит: «любой символ 0 и более раз» от начала и до конца строки - ^(.*)$). В случае удовлетворения паттерну, mod_rewrite перенаправляет запрос на файл, указанный во втором параметре (в нашем случае: index.phtml).
Теперь весь вопрос в том, как скрипт узнает о «/2005/12/31/theme.html». Есть два варианта.
Первый:
Код |
RewriteRule ^(.*)$ index.phtml?$1 [L] |
Где «/2005/12/31/theme.html» будет передано скрипту index.phtml в переменную QUERY_STRING, т.к. $1 – первые круглые скобки в паттерне, что будет равносильно: http://example.com/?/2005/12/31/theme.html . Но, вы где-ть такое видели? Нет. Поэтому, мы используем в качестве ключа QSA.
Есть переменная сервера (к которым скрипты имеют доступ) REQUEST_URI в котором всегда содержится GET запрос («/2005/12/31/theme.html»). Итак, если мы перенаправляем на index.phtml, то REQUEST_URI должен получить значение index.phtml, НО ключ QSA заменяет его НА «/2005/12/31/theme.html». Т.е. мы физически перенаправляем на index.phtml, а логически показываем скрипту, что пользователь обращался к «/2005/12/31/theme.html».
4. Делаем скрипт
Теперь мы уже работаем с index.phtml, скриптом, на который мы произвели перенаправление. Говорю сразу, код на PHP, т.к. другими языками под веб владею плохо.
Вот так все просто. Теперь вы можете оперировать с данным массивом. Дабы было еще понятнее. Приведу аналогию. Предположим такой адрес: http://example.com/index.phtml?year=2005&m...y=31&news=theme . Как мы знаем, что в скрипте данные параметры будут доступны через массив $_GET.
так вот, $_GET[‘year’] то же, что и $arr, $_GET[‘month’] то же, что и $arr, $_GET[‘day’] то же, что и $arr, $_GET[‘theme’] то же, что и $arr (только надо будет еще отрезать «.html»).
5. Что дает данный подход и mod_rewrite в целом?
Во-первых для поисковых систем намного приятнее URL вида: http://example.com/?/2005/12/31/theme.html , нежели http://example.com/index.phtml?year=2005&m...y=31&news=theme , да и для пользователей, согласитесь тоже.
Второй момент. При mod_rewrite практически на «нет» сводится возможность XSS нападения, т.к. include-баг практически перекрывается. На данном примере это не так видно, но поверьте на слово, это так. НО в любом случае все зависит от вашей головы!!!
Третий момент, это скрытие реально используемой технологии. отчасти это усложняет взлом сайта, но это лишь верхняя граница, как тина на застоявшемся пруду.
6. Возможные ошибки
Как правило могут возникнуть следующие ошибки:
404 – документ не найден. Причина: правила RewriteRule не срабатывают.
403 – Forbidden – доступ запрещен. Правила реврайта содержат логическую ошибку, которая возникает из-за попытки редиректа на файл, куда нет доступа (/index.php – выдаст именно это, т.к. / в UNIX системах означает путь от корневого каталога СЕРВЕРА, куда само собой у вас доступа не будет).
500 – Internal Server Error. Причина в синтаксической ошибке в файле.htaccess.
7. Альма-Матер дл изучения mod_rewrite
Лично мне эта статья очень помогла. Вот ее аннотация, а ниже я прикрепляю ZIP файл. В нем - эта статья в RTF формате,
Цитата |
«Главное преимущество, даваемое Вам mod_rewrite - это возможности конфигурирования и гибкость присущие Sendmail. Обратная сторона mod_rewrite - это возможности конфигурирования и гибкость присущие Sendmail». Brian Behlendorf Apache Group Brian Moore Добро пожаловать в мир mod_rewrite, швейцарский нож URL преобразований! Этот модуль оперирует с полными URL (включая path-info) и в контексте сервера (httpd.conf) и в контексте каталога (.htaccess) и даже может генерировать части строки запроса в качестве результата. Преобразованный результат может приводить к внутренней обработке, внешнему перенаправлению запроса или даже к прохождению через внутренний прокси модуль. Однако вся эта функциональность и гибкость имеет свой недостаток: сложность. Поэтому не ожидайте что вы поймете весь этот модуль за один день. Ralf S. Engelschall |
Важно :
Поддержка файла «.htaccess»
есть только на хостинге Linux. На Windows хостинге функцию «.htaccess»
выполняет файл web.config
.
Модуль поддержки «.htaccess» доступен на всех тарифах виртуального хостинга на основе ОС Linux. Если при установке CMS появляется сообщение об отсутствии поддержки «.htaccess» просто проигнорируйте его.
Если вы настраиваете web-сервер Apache, но у вас нет файла .htaccess , создайте его и пропишите нужные директивы.
Чтобы создать .htaccess , войдите в панель управления хостингом по инструкции: Расположите файл .htaccess в каталоге сайта с помощью статьи: .
Если вы случайно удалили файл .htaccess , восстановите его . Или добавить стандартный файл .htaccess для вашей CMS:
Чтобы увидеть скрытые файлы (начинающиеся с точки) в cPanel, необходимо выполнить следующие действия:
Модуль «mod_rewrite» присутствует на всех тарифных планах хостинга Linux. Чтобы активировать «mod_rewrite» добавьте в файл .htaccess строку вида.
Н а этом уроке, мы научиться управлять перезаписью URL с помощью Apache 2 и модуля mod_rewrite . Этот модуль позволяет переписать URL – адреса в более чистой манере, переводя удобочитаемые пути в кодовые дружественных строки запроса или перенаправляют URL – адреса на основе дополнительных условий.
Это руководство разделено на две части. Первая устанавливает пример веб-сайта и показывает простой пример перезаписи. Вторая часть содержит еще два углубленных примера, часто используемых правил перезаписи.
Следуя этому руководству, вам потребуется:
Во- первых, нам нужно активировать mod_rewrite . Он доступен, но не включен с чистой установкой Apache 2.
Sudo a2enmod rewrite
Он активирует модуль или предупреждает вас о том, что модуль уже включен. Чтобы изменения вступили в силу, перезапустите Apache.
mod_rewrite теперь полностью включен. На следующем шаге мы создадим файл.htaccess , который мы будем использовать, чтобы определить правила перезаписи для редиректа.
Файл.htaccess позволяет изменять наши правила перезаписи без доступа к файлам конфигурации сервера. По этой причине, .htaccess имеет решающее значение для безопасности вашего веб – приложения. Период, который предшествует имени файла гарантирует, что файл скрыт.
Примечание
Любые правила, которые вы будете помещать в файл.htaccess можно также поместить непосредственно в файлы конфигурации сервера. На самом деле, официальная документация Apache рекомендует использовать файлы конфигурации сервера, а не.htaccess потому, что Apache обрабатывает их быстрее.
Тем не менее, в этом простом примере, увеличение производительности будет незначительным. Кроме того, устанавливая правила.htaccess удобно, особенно с нескольких веб – сайтами на одном сервере. Она не требует перезагрузки сервера, чтобы изменения вступили в силу, и это не требует привилегий суперпользователя для редактирования этих правил, что упрощает техническое обслуживание и внесение изменений и возможные с непривилегированных аккаунтов. Некоторые популярные программы с открытым исходным кодом, такие как и Joomla, часто полагается на файл.htaccess в программном обеспечении, чтобы изменять и создавать дополнительные правила по требованию.
Нам нужно будет установить и обеспечить еще несколько настроек, прежде чем мы сможем начать.
По умолчанию Apache запрещает использование файла.htaccess для применения правил перезаписи, поэтому сначала вам нужно разрешить изменения в файл. Открыть файл конфигурации по умолчанию в Apache, используя nano или ваш любимый текстовый редактор.
Sudo nano /etc/apache2/sites-available/000-default.conf
Внутри этого файла вы найдете блок
/etc/apache2/sites-available/000-default.conf
Сохраните и закройте файл. Чтобы изменения вступили в силу, перезапустите Apache.
Sudo systemctl restart apache2
Теперь создайте файл.htaccess в корневой веб директории.
Добавьте эту строку в верхней части нового файла, чтобы активировать перезапись.
/var/www/html/.htaccess
RewriteEngine on
Сохраните файл и выйдите.
Теперь у вас есть оперативный файл.htaccess , который можно использовать для управления правилами маршрутизации вашего веб – приложения. На следующем этапе мы создадим образцы файлов сайта, которые мы будем использовать, чтобы продемонстрировать правила перезаписи.
Здесь мы установим базовую перезапись URL, которая преобразует URL – адреса в реальные пути к коду. В частности, мы будем разрешать пользователям доступ. http://your_server_ip /about
Начнем с создания файла с именем about.html в корневой директории веб.
Sudo nano /var/www/html/about.html
Скопируйте следующий HTML-код в файл, а затем сохраните и закройте его.
/var/www/html/about.html
Вы можете получить доступ к странице http://your_server_ip/about.html, но обратите внимание, что если вы попытаетесь получить доступ к http://your_server_ip/about, вы увидите ошибку 404 Not Found . Но чтобы пользователи получили доступ к странице с помощью about вместо того, чтобы, переписать правила позволит эта самая функциональность.
RewriteRules соблюдает следующий формат:
Общая структура RewriteRule
RewriteRule pattern substitution
Откройте файл.htaccess .
Sudo nano /var/www/html/.htaccess
После первой строки, добавьте RewriteRule отмеченный красным цветом, и сохраните файл.
/var/www/html/.htaccess
RewriteEngine on RewriteRule ^about$ about.html
В этом случае, ^about$ это шаблон, about.html это замена, и является флагом. Наш пример использует несколько символов со специальным значением:
Теперь, вы должны иметь возможность доступа к http://your_server_ip/about в вашем браузере. На самом деле, с правилом показанным выше, следующие URL – адреса будут указывать about.html:
Ниже не будет:
Теперь у вас есть оперативный файл.htaccess с простым правилом, вы можете изменить и расширить для ваших потребностей. В следующих разделах мы покажем два дополнительных примера наиболее часто используемых директив.
Веб – приложения часто используют строки запроса , которые добавляются к URL – адресу, используя знак вопроса (?) после адреса. Отдельные параметры разделяются с помощью амперсанда (&). Строки запроса могут быть использованы для передачи дополнительных данных между отдельными страницами приложения.
Например, страницы результатов поиска написанные на PHP, могут использовать URL, как http://example.ru/results.php?item=shirt&author=andreyex . В этом примере два дополнительных параметра передают воображаемый result.php сценария приложения: item со значением shirt и author со значением andreyex . Приложение может использовать информацию строки запроса, чтобы построить правильную страницу для посетителя.
Правила перезаписи Apache часто используются для упрощения таких длинных и неприглядных ссылок как выше в дружественные URL – адреса , которые легче вводить и интерпретировать визуально. В этом примере, мы хотели бы, упростить ссылку выше, чтобы сделать http://example.ru/shirt/andreyex . shirt и значения параметров author и andreyex к прежнему адресу, но без строки запроса и имени сценария.
Вот одно правило для реализации этого:
Простой пример
RewriteRule ^shirt/andreyex$ results.php?item=shirt&author=andreyex
shirt/andreyex явно сопоставляются в запрашиваемом адресе и Apache указал запустить вместо этого results.php?item=shirt&author=andreyex .
флаги обычно используются в правила[ перезаписи. Они говорят Apache, чтобы добавить любые дополнительные строки запроса к обслуживаемому URL. Без этого, дополнительная строка запроса будет отбрасываются. http://example.ru/shirt/andreyex?page=2 results.php?item=shirt&author=andreyex&page=2
Хотя этот метод позволяет достичь желаемого эффекта, как имя элемента и author жестко закодированы в правила. Это означает, что правило не будет работать для любыми другими предметами, например pants , или author, как destroyer .
Для того, чтобы сделать правило более общо, мы можем использовать регулярные выражения, чтобы соответствовать части исходного адреса и использовать те части в схеме замещения. Модифицированное правило будет выглядеть следующим образом:
Простой пример
RewriteRule ^(+)/(andreyex|destroyer|fall|spring) results.php?item=$1&author=$2
Первое регулярное выражение группы в скобках соответствует строке, содержащей буквенно-цифровые символы и цифры, как shirt или pants и сохраняет совпавший фрагмент в качестве переменной $1 . Вторая группа выражений в скобках соответствует точно andreyex , destroyer , fall или spring , и так же сохраняет совпавший фрагмент как $2 .
Согласованные фрагменты затем в результирующий URL в переменные item и author вместо жёстко shirt и andreyex , которые мы использовали раньше.
Выше будет преобразовывать, например, http://example.ru/pants/andreyex в http://example.ru/results.php?item=pants&author=andreyex . Этот пример также на будущее, позволяя нескольким элементам и author правильно переписать с использованием единого правила.
Правила перезаписи не обязательно всегда вычисляются один за другим без каких – либо ограничений. Директива RewriteCond позволяет нам добавлять условия для наших правил перезаписи, чтобы контролировать, когда правила будут обработаны. RewriteConds соблюдает следующий формат:
Общая структура RewriteCond
RewriteCond TestString Condition
Если имеет RewriteCond значение истинно, то RewriteRule сразу после будет рассмотрен. Если это не будет, то правило будет отброшено. Многократная RewriteCond может использоваться один за другим, и с поведением по умолчанию, все они должны оценить, верно и в следующем правиле для рассмотрения.
В качестве примера, давайте предположим, что вы хотели бы перенаправить все запросы на несуществующие файлы и каталоги на вашем сайте обратно на главную страницу вместо того чтобы показывать стандартную страницу ошибку 404 Not Found . Это может быть достигнуто с следующими условиями правил:
Перенаправить все запросы на несуществующие файлы и каталоги на главную страницу
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /
С учетом указанных выше:
RewriteRule На последней строке вступит в силу только для запросов на несуществующие файлы и каталоги. RewriteRule Сама по себе очень проста и перенаправляет каждый запрос на / корень сайта.
mod_rewrite полезный модуль Apache, который может быть эффективно использован для обеспечения удобочитаемых URL. На этом уроке вы узнали, как использовать директиву RewriteRule для перенаправления URL – адресов, в том числе с строки запроса. Вы также узнали перенаправление URL – адреса с помощью директивы RewriteCond .
Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:
Это происходит не потому, что разработчики этого сайта потратили уйму времени, чтобы настроить отдельные директории для разных категорий товара, а благодаря удобному модулю по имени mod_rewrite. Данный модуль позволяет создавать пользовательские и упрощенные URL-адреса. На самом деле URL выглядит примерно так:
http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?
Данное руководство охватывает активацию данного модуля, создание и использование страницы.htaccess, а также настройку переписывания URL-адресов.
Кроме того, нужно предварительно установить apache. Для быстрой установки этого веб-сервера в Ubuntu используйте команду:
sudo apt-get install apache2
Для начала нужно включить mod_rewrite, это очень просто:
sudo a2enmod rewrite
Данная команда включит модуль или же выведет сообщение «Module rewrite already enabled» в случае если модуль уже включен.
Как только модуль был активирован, можно настроить перезапись ссылок путем создания файла.htaccess в каталоге сайта.
Файл.htaccess – это способ тонкой настройки сайта без необходимости изменять файлы конфигурации сервера. Точка, с которой начинается имя файла, значит, что этот файл является скрытым.
Кроме того, важную роль играет размещение файла.htaccess, поскольку настройки этого файла будут влиять на все файлы и подкаталоги каталога, в котором он находится.
Создать файл.htaccess можно при помощи текстового редактора, а затем выгрузить его на сайт при помощи ftp-клиента.
Обратите внимание : файл должен называться именно.htaccess; имя файла не должно содержать дополнительных расширений.
В качестве альтернативы можно создать файл.htaccess через терминал при помощи этой команды, заменив example.com доменным именем сайта.
Чтобы разрешить файлу.htaccess переопределять стандартные настройки сайта, откройте конфигурационный файл.
Примечание : для этого понадобятся расширенные привилегии sudo.
sudo nano /etc/apache2/sites-available/default
В этом файле найдите следующий раздел и измените значение строки AllowOverride (замените None на All). В результате раздел будет иметь такой вид:
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Сохранив изменения и закрыв файл, перезапустите сервер apache. Теперь файлы.htacess доступны всем сайтам сервера.
sudo service apache2 restart
Теперь все готово для переписывания URL-адресов сайта.
Вся операция переписывания URL происходит в файле.htaccess. В целом, все команды перезаписи URL-адреса следовать той же схеме:
RewriteRule Pattern Substitution
Опции, использованные в данной команде:
Это наиболее простой пример перезаписи URL: посетитель сайта вводит в браузер один URL, но перенаправляется на другой. Чтобы настроить такое поведение, следуйте инструкциям этого раздела.
Для начала создайте две страницы сайта; например, первая о яблоках (apples.html), а вторая – об апельсинах (oranges.html).
Скопируйте этот код:
Затем создайте вторую страницу (в данном случае, страницу, посвященную апельсинам). Для этого просто замените Apples в этом блоке кода на Oranges.
Затем откройте файл.htaccess:
sudo nano /var/www/example.com/.htaccess
Внесите в него следующие команды перезаписи URL:
RewriteEngine on
RewriteRule ^oranges.html$ apples.html
Сохраните и закройте файл.
Затем посетите страницу /oranges.html, она будет содержать информацию страницы /apples.html.
Рассмотрим вышеприведенную команду подробнее:
Проверьте url:
http://example.com/results.php?products=apple
Он будет гораздо понятнее отображаться как:
http://example.com/products/apple
Для этого нужно внести в.htaccess следующие строки:
RewriteEngine on
RewriteRule ^products/(+)/?$ results.php?products=$1
Эти строки состоят из следующих опций:
Эта функция незаменима в том случае, если URL-адреса сайта слишком длинные или сложные.
В качестве примера можно взять такой URL-адрес:
http://example.com/results.php?products=produce&type=fruit&species=apple
http://example.com/produce/fruit/apple
Для этого нужно внести в.htaccess следующие строки (к слову, .htaccess может содержать неограниченное количество таких разделов):
RewriteEngine on
RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3
Рассмотрим этот код подробнее:
Продолжение статьи можно найти .
Tags: ,Данное руководство поможет настроить перезапись URL-адресов на Apache2 с помощью модуля mod_rewrite. Этот инструмент позволяет переписывать URL-адреса и создавать чистые ссылки, преобразовывая сложные пути в понятные и читабельные ссылки.
Apache можно установить с помощью пакетного менеджера apt-get.
Сначала нужно обновить индекс пакетов:
sudo apt-get update
Apache – это популярный модульный веб-сервер (то есть, он позволяет настраивать функции путём включения и отключения модулей). Чтобы установить Apache 2, введите:
sudo apt-get install apache2
Сервер Apache успешно установлен.
Теперь нужно сосредоточить внимание на модулях.
Чтобы включить mod_rewrite, введите:
sudo a2enmod rewrite
Команда включит модуль и сообщит вам о том, что модуль работает. Чтобы обновить настройки веб-сервера, перезапустите его:
sudo service apache2 restart
Теперь нужно написать файл.htaccess, который будет управлять перезаписью.
Файл.htaccess определяет индивидуальные директивы Apache для каждого отдельного домена.
Примечание : В Linux с символа точки начинаются имена скрытых файлов.
Сначала нужно включить поддержку файлов.htaccess. Для этого отредактируйте директиву AllowOverride в конфигурационном файле Apache. Откройте файл:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Найдите блок
etc/apache2/sites-available/default
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Теперь конфигурационный файл веб-сервера должен выглядеть так:
/etc/apache2/sites-available/default
. . .
. . .
Чтобы обновить настройки, перезапустите Apache.
sudo service apache2 restart
Создайте файл.htaccess:
Добавьте в начало нового файла такую строку, чтобы активировать RewriteEngine:
RewriteEngine on
Сохраните и закройте файл. Так Apache сможет обрабатывать правила перезаписи.
Другие пользователи должны иметь только право на чтение.htaccess. Измените права доступа к файлу:
sudo chmod 644 /var/www/html/.htaccess
Данный раздел покажет, как настроить базовую перезапись URL-адресов. В качестве примера используется ссылка example.com/about.
Создайте файл about.html:
sudo nano /var/www/html/about.html
Скопируйте следующий код и поместите его в файл:
Обратите внимание: доступ можно получить только к about.html. Если вы введёте ссылку ip_адрес_сервера /about, вы получите ошибку 404 Not Found. Создайте правило перезаписи, чтобы исправить это.
Откройте файл.htaccess:
sudo nano /var/www/html/.htaccess
Добавьте в него следующую строку:
RewriteRule ^about$ about.html
Теперь файл содержит такие настройки:
RewriteEngine on
RewriteRule ^about$ about.html
Теперь браузер сможет обслуживать страницу example.com/about.
На примере этого правила можно рассмотреть общий синтаксис перезаписи.
Согласно этому правилу, доступ к странице можно получить по следующим ссылкам:
example.com/about
example.com/About
example.com/about.html
example.com/about/
example.com/contact
Итак, теперь вы знаете основы написания правил перезаписи. Рассмотрим два дополнительных примера.
Примечание : Для тестирования можно создать пару дополнительных файлов.
Правила RewriteRule имеют такой формат:
RewriteRule pattern substitution
Приложения часто используют строки запросов. Эти строки находятся в URL-адресе, начиная с вопросительного знака (?) и заканчивая амперсандом (&). Обрабатывая правила перезаписи, Apache игнорирует эти два символа. К примеру, URL страницы результатов поиска, написанной на PHP, может выглядеть следующим образом:
http://example.com/results.php?item=shirt&season=summer
Конечно, пользователям будет гораздо удобнее, если ссылка будет чистой:
http://example.com/shirt/summer
Этого можно добиться двумя способами: с помощью простой замены или группирования параметров.
Создайте правило, выполняющее простую замену, чтобы ссылка стала чистой:
RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer
Это правило вместо results.php?item=shirt&season=summer будет использовать shirt/summer.
В некоторых ситуациях нужно оптимизировать строку запросов (к примеру, чтобы она включала все сезоны). Для этого нужно:
В результате получится такое правило:
RewriteRule ^shirt/(summer|winter|fall|spring) results.php?item=shirt&season=$1
Это правило добавляет в URL новый сегмент.
Чтобы пользователь мог открыть чистый URL любого раздела сайта (не только / shirt), нужно:
RewriteRule ^(+)/(summer|winter|fall|spring) results.php?item=$1&season=$2
http://example.com/results.php?item=pants&season=summer
http://example.com/pants/summer
Это позволит вам устранить ряд потенциальных проблем. Попробуйте преобразовать:
http://example.com/pants/summer?page=2
http://example.com/results.php?item=pants&season=summer&page=2
При текущих настройках вы не сможете перейти на page=2. Это можно исправить с помощью флага QSA, который позволяет комбинировать строки запросов. Отредактируйте правило следующим образом:
RewriteRule ^(+)/(summer|winter|fall|spring) results.php?item=$1&season=$2
Теперь рассмотрим подробнее директиву RewriteCond. RewriteCond имеет такой формат:
RewriteCond TestString Condition
Если условие перезаписи RewriteCond истинно, Apache обработает следующее за ним правило RewriteRule.
Ранее вы видели, что в случае если запрашиваемой страницы не существует, Apache возвращает страницу ошибки 404 Not Found. Однако вместо этого Apache может перенаправлять все подобные запросы на домашнюю страницу. Добавьте следующее условие, чтобы убедиться, что запрашиваемый файл существует:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.*)$ /admin/home
Рассмотрим вышеприведённое правило по частям:
Также можно задать ErrorDocument, на который будут отправляться все запросы на несуществующие страницы. Создайте правило ErrorDocument и перенаправьте все ошибки 404 на страницу error.html:
ErrorDocument 404 /error.html
RewriteCond позволяет ограничивать доступ к сайту по IP-адресу.
К примеру, это правило заблокирует весь трафик, кроме 12.34.56.789:
RewriteCond %{REMOTE_ADDR} !^(12\.34\.56\.789)$
RewriteRule (.*) -
kayabaparts.ru - Прихожая, кухня, гостиная. Сад. Стулья. Спальня