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 не был установлен на вашем сервере, выполните следующие шаги.
- Найдите файл httpd.conf (обычно вы найдете его в папке под названием conf, config или что-то в этом роде)
- Внутри файла httpd.conf раскомментируйте строку LoadModule rewrite_module modules/mod_rewrite.so (уберите знак решетки ‘#’ перед строкой)
- Также найдите строку 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, если завершающий слэш добавлен. Третья строка добавляет завершающий слэш и перенаправляет пользователя.
Get new posts in your inbox
No spam. Unsubscribe anytime.