SEO · 4 min read · Jan 02, 2026

Полезные применения Mod Rewrite

Полезные применения Mod Rewrite

Автор: Майк Эмс

В этом уроке я собираюсь объяснить, что такое mod rewrite и привести несколько примеров его использования. Mod rewrite — это мощный инструмент и один из самых простых способов сделать ваш сайт более удобным для SEO.

Что такое Mod Rewrite?

Mod rewrite — это часть серверов Apache, которая может переписывать запрашиваемые URL на лету. Поскольку он поддерживает бесконечное количество правил, которые, в свою очередь, имеют неограниченное количество условий, он очень гибок и является важным механизмом манипуляции URL. Его можно использовать для интернет-пользователей и для URL, удобных для поисковых систем. Это увеличивает шансы индексирования сайта, работающего на базе базы данных.

Включение / Установка Mod Rewrite

Первое, что мы хотим сделать, это убедиться, что у нас есть mod_rewrite на нашем сервере. По умолчанию Apache имеет установленный mod_rewrite, но он не включен. Самый простой способ проверить, включен ли mod_rewrite на вашем сервере, — создать файл .htaccess в тестовом каталоге, таком как /modrewrite-test/.htaccess, с следующим содержимым:

Options +FollowSymLinks  
RewriteEngine On

Теперь попробуйте перейти в подкаталог. Может произойти одно из двух:

  • Нет ошибок Поздравляем, движок mod_rewrite теперь включен.
  • 500, Внутренняя ошибка сервера Если вы получили это сообщение, значит, mod_rewrite не был установлен/включен на вашем сервере.

Если вы обнаружили, что mod_rewrite не был установлен на вашем сервере, выполните следующие шаги.

  1. Найдите файл httpd.conf (обычно вы найдете его в папке под названием conf, config или что-то в этом роде)
  2. Внутри файла httpd.conf раскомментируйте строку LoadModule rewrite_module modules/mod_rewrite.so (уберите знак решетки ‘#’ перед строкой)
  3. Также найдите строку ClearModuleList, которая не закомментирована, затем найдите и убедитесь, что строка AddModule mod_rewrite.c не закомментирована.

После этих шагов перезапустите ваш сервер Apache с помощью следующей команды.

/etc/init.d/httpd restart

Теперь у вас должен быть успешно включен mod_rewrite. Обязательно протестируйте mod_rewrite снова после перезапуска сервера Apache.

Использование Mod Rewrite для постоянного удаления / добавления WWW

Одной из легко исправляемых проблем, с которыми сталкиваются многие веб-сайты, является дублирование результатов в поисковых системах. В любой поисковой системе http://www.example.com/ и http://example.com — это два совершенно разных веб-сайта. Это большая проблема, потому что контент на вашем сайте идентифицируется как дублирующийся контент, и это снижает ваши позиции в поисковых системах. Используя нашего нового друга, mod_rewrite, мы можем решить эту проблему.

В верхней части любого файла .htaccess вам нужно включить Mod Rewrite. Это должно всегда быть в верхней части вашего файла .htaccess. Вам нужно включить Mod Rewrite только один раз.

RewriteEngine On

Кроме того, вам нужно установить вашу Rewrite Base. Это обычно каталог, в котором находится файл .htaccess. Если ваш файл .htaccess находится в корневом каталоге, ваша Rewrite Base будет выглядеть так:

RewriteBase /

Теперь есть два варианта на выбор. Вы можете либо всегда удалять www, либо всегда оставлять его. Чтобы всегда удалить www (мой предпочтительный метод), создайте файл .htaccess в вашем корневом каталоге. Внутри этого файла добавьте следующее:

RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]  
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

Аналогично, если вы хотите всегда добавлять www, добавьте следующее в ваш файл .htaccess:

RewriteCond %{HTTP_HOST} ^example.com$  
RewriteRule (.*) http://www.example.com$1 [R=301]

Не забудьте заменить example.com на ваш домен.

Использование Mod Rewrite для очистки ваших URL

Самое популярное использование Mod Rewrite — это использование его для очистки URL вашего сайта. Как вы, возможно, знаете, поисковые системы не особенно любят URL с множеством аргументов, как это делают многие сайты. Пример:

http://www.example.com/index.php?p=about

С помощью модуля mod_rewrite Apache мы можем сделать этот URL намного чище.

http://www.example.com/about.html

Чтобы добиться этого, мы увидим нашего хорошего друга регулярные выражения. Я знаю, что вы сейчас очень взволнованы. Чтобы выполнить переписывание выше, я добавил следующее в мой файл .htaccess после строк добавления/удаления www.

RewriteRule ^([^/]+).html$ /index.php?p=$1 [QSA,L,NC]

Давайте подробнее рассмотрим эту строку, чтобы мы действительно поняли, что она делает.

([^/]+)

Это регулярное выражение для сопоставления всего, кроме косой черты. Это самый простой способ сопоставить все, что будет находиться между двумя косыми чертами при работе с переписыванием URL.

.html

Это переписывает URL, чтобы он заканчивался на .html. Это создает вид обычного .html файла для вашего php файла.

/index.php?p=$1

Это часть переписывания, которая является исходным местоположением. Каждый раз, когда у вас есть регулярное выражение в первой части, соответствующее определенной строке, вы должны ссылаться на него в этой части. $1 ссылается на первое регулярное выражение в первой половине строки. Таким образом, любое значение, присвоенное переменной p, помещается там, где находится первое регулярное выражение в первой половине строки.

Если вы хотите, чтобы ваш URL выглядел как каталог, вы бы использовали эту строку вместо ранее приведенной.

RewriteRule ^([^/]+)/?$ /index.php?p=$1 [QSA,L,NC]

Это вернет URL, такие как:

http://www.example.com/about/

Добавление завершающего слэша к вашим URL

Основная цель добавления завершающего слэша к вашим URL заключается в том, что это увеличивает производительность сервера. Когда к концу URL, который не заканчивается на расширение файла, добавляется завершающий слэш, это говорит серверу, чтобы он сделал только один вызов к самому себе, тем самым уменьшая трафик на сервере.

Чтобы всегда добавлять завершающий слэш к URL, который не заканчивается на расширение файла, например http://www.example.com, добавьте следующее в ваш файл .htaccess в корневом каталоге.

rewriteCond $1 !/$  
rewriteCond %{REQUEST_FILENAME}/ -d  
rewriteRule (.+) http://www.example.com/$1/ [R=301,L]

Первая строка проверяет, есть ли завершающий слэш. Вторая строка проверяет, существует ли каталог с данным URL, если завершающий слэш добавлен. Третья строка добавляет завершающий слэш и перенаправляет пользователя.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.