- Настройка mod_rewrite
- Требования
- 1: Включение mod_rewrite
- 2: Что такое .htaccess?
- Включение файла .htaccess
- 3: Переписывание URL-адресов
- Примеры перезаписи URL-адреса
- Пример 1: открываете страницу А – попадаете на страницу Б
- This page is about Apples
- Пример 2: Параметр как подкаталог в URL-адресе
- Пример 3: Настройка чистых ссылок
- Как включить mod_rewrite?
Настройка mod_rewrite
Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:
Это происходит не потому, что разработчики этого сайта потратили уйму времени, чтобы настроить отдельные директории для разных категорий товара, а благодаря удобному модулю по имени mod_rewrite. Данный модуль позволяет создавать пользовательские и упрощенные URL-адреса. На самом деле URL выглядит примерно так:
Данное руководство охватывает активацию данного модуля, создание и использование страницы .htaccess, а также настройку переписывания URL-адресов.
Требования
Для выполнения данного руководства понадобятся привилегии root (чтобы получить более подробную информацию, читайте статью «Начальная настройка сервера Ubuntu»).
Кроме того, нужно предварительно установить apache. Для быстрой установки этого веб-сервера в Ubuntu используйте команду:
sudo apt-get install apache2
1: Включение mod_rewrite
Для начала нужно включить mod_rewrite, это очень просто:
Данная команда включит модуль или же выведет сообщение «Module rewrite already enabled» в случае если модуль уже включен.
2: Что такое .htaccess?
Как только модуль был активирован, можно настроить перезапись ссылок путем создания файла .htaccess в каталоге сайта.
Файл .htaccess – это способ тонкой настройки сайта без необходимости изменять файлы конфигурации сервера. Точка, с которой начинается имя файла, значит, что этот файл является скрытым.
Кроме того, важную роль играет размещение файла .htaccess, поскольку настройки этого файла будут влиять на все файлы и подкаталоги каталога, в котором он находится.
Создать файл .htaccess можно при помощи текстового редактора, а затем выгрузить его на сайт при помощи ftp-клиента.
Обратите внимание: файл должен называться именно .htaccess; имя файла не должно содержать дополнительных расширений.
В качестве альтернативы можно создать файл .htaccess через терминал при помощи этой команды, заменив example.com доменным именем сайта.
sudo nano /var/www/example.com/.htaccess
Включение файла .htaccess
Чтобы разрешить файлу .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-адресов сайта.
3: Переписывание URL-адресов
Вся операция переписывания URL происходит в файле .htaccess. В целом, все команды перезаписи URL-адреса следовать той же схеме:
RewriteRule Pattern Substitution [OptionalFlags]
Опции, использованные в данной команде:
- RewriteRule: Это раздел, в котором можно задать нужные директивы.
- Pattern: этот раздел предназначен для интерпретации нужного URL-адреса с помощью регулярных выражений. Это руководство не охватывает регулярные выражения; некоторую полезную информацию по этому вопросу можно найти на сайте Apache.
- Substitution: отображает фактический URL страницы. Такую ссылку трудно запомнить, поскольку она состоит из параметров PHP или длинных последовательностей цифр, например: www.bestshop.com/gadgets.php?innovation=laptops
- Optional Flags: флаг представляет собой тег в конце директивы RewriteRule, способный изменить поведение выражения. Некоторые общие флаги: [F] запрещает URL, [NC] игнорирует заглавные буквы, [R = 301] или [R = 302] контролируют используемый код переадресации, [L] говорит о том, что это последнее правило в серии.
Примеры перезаписи URL-адреса
Пример 1: открываете страницу А – попадаете на страницу Б
Это наиболее простой пример перезаписи URL: посетитель сайта вводит в браузер один URL, но перенаправляется на другой. Чтобы настроить такое поведение, следуйте инструкциям этого раздела.
Для начала создайте две страницы сайта; например, первая о яблоках (apples.html), а вторая – об апельсинах (oranges.html).
This page is about Apples
Затем создайте вторую страницу (в данном случае, страницу, посвященную апельсинам). Для этого просто замените Apples в этом блоке кода на Oranges.
Затем откройте файл .htaccess:
sudo nano /var/www/example.com/.htaccess
Внесите в него следующие команды перезаписи URL:
RewriteEngine on
RewriteRule ^oranges.html$ apples.html
Сохраните и закройте файл.
Затем посетите страницу /oranges.html, она будет содержать информацию страницы /apples.html.
Рассмотрим вышеприведенную команду подробнее:
- ^oranges.html: указывает, как начинается нужная страница. Каре (^) указывает на начало строки. Другими словами, если бы страница, URL которой нужно переписать, начиналась иначе (например, не oranges.html, а oranges_1.html), она не совпала бы с правилом перезаписи (rewrite rule) и не была бы перенаправлена на страницу birds.html.
- $: символ доллара ставится в конце URL-адреса. Опять же, если строка заканчивается иначе (например, содержит какие-либо символы после заявленных последних символов), веб-страница не будет распознана правилом перезаписи.
- apples.html: на эту страницу браузер направляет трафик.
Пример 2: Параметр как подкаталог в URL-адресе
Он будет гораздо понятнее отображаться как:
Для этого нужно внести в .htaccess следующие строки:
RewriteEngine on
RewriteRule ^products/([A-Za-z0-9-]+)/?$ results.php?products=$1 [NC]
Эти строки состоят из следующих опций:
- ^products: в данном случае чтобы быть перенаправленным, URL должен начинаться со слова products (имейте в виду, что это относится только к тексту после домена). Опять же, если URL начинается иначе, правило не будет применяться.
- ([A-Za-z0-9-]+): этот взятый в скобки текст указывает, что URL может состоять из любых символов. Знак плюс указывает, что находиться в скобках может один или несколько символов.
- /?$: символ доллара обозначает конец строки. Вопросительный знак позволяет ставить в конце строки косую черту (хотя это необязательно).
- [NC]: это флаг в конце фразы, указывающий, что правило должно игнорировать регистры всех символов.
Пример 3: Настройка чистых ссылок
Эта функция незаменима в том случае, если URL-адреса сайта слишком длинные или сложные.
В качестве примера можно взять такой URL-адрес:
Эта ссылка открывает нужную информацию, но посетитель не сможет быстро запомнить ее при необходимости. Перезапись URL позволяет преобразовать ссылку в более простую и запоминающуюся:
Для этого нужно внести в .htaccess следующие строки (к слову, .htaccess может содержать неограниченное количество таких разделов):
RewriteEngine on
RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3
Рассмотрим этот код подробнее:
- Каре (символ ^) указывает на начало выражения.
- (meat|produce|dairy): чтобы ограничить параметры, которые можно отображать, укажите в скобках только разрешенные значения (в этом случае это meat, produce и dairy). Если URL содержит параметр, не внесенный в скобки, перезапись не будет выполнена.
- ([^/.]+) показывает, что все, кроме символов после символа вставки (в данном случае, косой черты и точки), может быть написано через косую.
- results.php?products=$1&type=$2&species=$3: каждое значение в круглых скобках будет извлечено и затем вставлено в более длинный URL в части substitution. $1 обозначает первые скобки, $2 – вторые, $3 – соответственно, третьи.
Продолжение статьи можно найти по данной ссылке.
Как включить mod_rewrite?
Если я правильно понимаю, мне нужно поместить что-то в php.ini чтобы включить mod_rewrite. Если это так, что мне нужно добавить в php.ini ?
Нет, mod_rewrite – это модуль Apache и не имеет ничего общего с PHP.
Чтобы активировать модуль, следующая строка в httpd.conf должна быть активной:
LoadModule rewrite_module modules/mod_rewrite.so
чтобы убедиться, что он уже активен, попробуйте поместить файл .htaccess в веб-каталог, содержащий строку
если это работает, не выкидывая ошибку внутреннего внутреннего сервера 500, а файл .htaccess обрабатывается, выполняется переписывание URL-адресов.
Просто fyi для людей, поддерживающих mod_rewrite на Debian с Apache2:
Чтобы проверить, включен ли mod_rewrite:
Посмотрите в mods_enabled для ссылки на модуль, запустив
ls /etc/apache2/mods-enabled | grep rewrite
Если это выдает rewrite.load тогда модуль включен. (Примечание: ваш путь к apache2 может не быть / etc /, хотя это, вероятно, будет.)
Чтобы включить mod_rewrite, если это еще не сделано :
Включите модуль (по существу создайте ссылку, которую мы искали выше):
Перезагрузите все файлы конфигурации apache:
В моем случае проблема возникла даже после всех этих конфигураций (@Pekka упомянул об изменениях в файлах httpd.conf и .htaccess). Это было разрешено только после добавления
Order allow,deny Allow from all AllowOverride All
к конфигурации виртуального хоста в файле vhost
DocumentRoot "E:/Documenten/Dropbox/Dropbox/dummy-htdocs" ServerName dropbox.local ErrorLog "logs/dropbox.local-error.log" CustomLog "logs/dropbox.local-access.log" combined # AllowOverride All # Deprecated # Order Allow,Deny # Deprecated # Allow from all # Deprecated # --New way of doing it Require all granted
Модуль rewrite_module встроен в сервер в большинстве случаев
Используйте генератор перезаписи мод по адресу http://www.generateit.net/mod-rewrite/
Нет, вам не нужно. mod_rewrite – это модуль Apache. Это не имеет никакого отношения к php.ini .
сетевые решения предлагают совет поместить php.ini в cgi-bin, чтобы включить mod_rewrite
если это связано с сайтом хостинга, то спросите о своем хостинге или если вы хотите включить его на локальном компьютере, то проверьте это пошаговое учебное пособие по youtube, связанное с включением перезаписи модуля в wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s
Значок Wamp Server -> Apache -> Apache Modules и проверьте параметр перезаписи, который нужно проверить, но после этого вам нужно перезагрузить все службы
Чтобы использовать mod_rewrite, вы можете ввести следующую команду в терминал:
$ su $ passwd ********** # a2enmod rewrite
Перезапустить apache2 после
# service apache2 restart # /etc/init.d/apache2 restart
- условный htaccess?
- Как включить mod_rewrite в LAMP на ubuntu?
- Как разрешить три необязательных параметра в URL-адресе .htaccess?
- Не удается удалить index.php с сайта на основе CI
- Недопустимый общий доступ к папке MVC
- Mod-rewrite не работает на сервере Network Solutions
- URL-адрес перезаписи для субдомена
- .htaccess короткий и дружественный URL-адрес
- как перенаправить в подпапку, а затем переписать ссылку вложенной папки на root в htaccess?
- Как Zend анализирует URL-адрес в переднем контроллере с помощью mod_rewrite?
- Использование mod-rewrite для передачи маршрута index.php
- Как изменить формат URL-адреса изменения на POST с помощью htacess php?