Перенаправления Apache: Инструкции для CentOS и Ubuntu

Перенаправления Apache полезны в самых разных ситуациях. Среди прочего, вы можете использовать удобные редиректы, чтобы направить посетителей с HTTP на HTTPS (Apache http to https redirect) версию вашего сайта, перенаправить трафик с www на не www URL, или даже изменить имена сайтов и каталогов. Мы поможем вам понять и настроить перенаправления Apache на CentOS и Ubuntu.

301 или 302 редирект: в чем разница?

При рассмотрении редиректов важно различать 301 и 302 редиректы. Первый код статуса (301) означает постоянное перенаправление, а второй (302) — временное.

301-й редирект гораздо более желателен с точки зрения SEO. Если поисковая система находит такой редирект, она понимает, что это постоянный редирект. По этой причине он не только отмечает новый URL, но и инициирует процесс переноса любого значения Page Rank со старого URL на новый — таким образом, сохраняется уже достигнутый SEO-рейтинг.

С другой стороны, если краулер обнаруживает перенаправление 302, он отмечает новый адрес и идет дальше. В зависимости от краулера, он может пометить URL для повторного посещения в будущем. Это происходит потому, что перенаправление 302 должно указывать на то, что перенаправление временное и «настоящий» URL вскоре вернется в сеть.

Совет

При создании перенаправления всегда указывайте, что это 301 перенаправление. Во многих ситуациях перенаправления по умолчанию принимают значение 302, если тип перенаправления не указан.

Перенаправления Apache301: Основы

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

Простое перенаправление URL

Для одного 301 редиректа используйте директиву redirect в конфигурационном файле Apache. Синтаксис для этого выглядит следующим образом:

Redirect 301 [old URL] [new URL]

Новый URL также может быть внешним URL. Таким образом, пользователям можно сообщать, например, привлекательный URL example.com/store вместо того, чтобы отправлять длинный и сложный URL страницы магазина Amazon. Следующий пример перенаправляет трафик с example.com/store на страницу магазина Amazon следующим образом:

Redirect 301 example.com/store https://www.amazon.com/s?marketplaceID=..

Директива Apache redirect всегда должна быть включена в командный блок VirtualHost в основном конфигурационном файле веб-сервера. По умолчанию этот файл можно найти в следующих местах:

  • CentOS: /etc/httpd/conf.d/example.com.conf
  • Ubuntu: /etc/apache2/sites-available/example.com.conf
Примечание

Расположение и имя файла конфигурации Apache может отличаться — в зависимости от того, как вы или ваш администратор сервера настроили хостинг.

Отредактируйте этот файл с помощью редактора по вашему выбору, например, редактора командной строки nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

Прокрутите файл, пока не найдете командный блок VirtualHost, который выглядит примерно так:

<VirtualHost *:80>
ServerName example.com
  <Directory "/var/www/example.com/html">
  AllowOverride All
  </Directory>
</VirtualHost>

Теперь добавьте директиву Apache redirect в командный блок VirtualHost. При этом убедитесь, что директива находится вне командных блоков каталогов:

<VirtualHost *:80>
ServerName example.com
Redirect 301 /blog https://blog.example.com
  <Directory "/var/www/example.com/html">
  AllowOverride All
  </Directory>
</VirtualHost>

Сохраните и закройте файл, затем перезапустите Apache, чтобы изменения вступили в силу:

CentOS:

sudo systemctl restart httpd

Ubuntu:

sudo service apache2 restart

Apache: Перенаправление каталога

Таким же образом можно перенаправить подкаталог текущего сайта. Например, предположим, вы хотите переместить блог вашего сайта из подкаталога (‘http://example.com/blog’) в собственный канонический домен (‘http://blog.example.com’). Политика перенаправления Apache будет такой:

Redirect 301 /blog https://blog.example.com

Перенаправлять с www на не-www домены.

Обычно перенаправление www-версии URL на не www-версию (или наоборот) осуществляется с помощью строки «ServerAlias» в конфигурационном файле Apache. Хотя этот подход хорошо работает с точки зрения посетителей, он не считается «лучшей практикой» с точки зрения SEO. Это связано с тем, что использование «ServerAlias» вместо 301 редиректа несет в себе риск того, что рассматриваемый контент может быть отмечен как дублированный. В целом, однако, с точки зрения SEO нет никакой разницы между www и не www версиями URL. Главное, чтобы вы выбрали один из них.

Далее мы перенаправим трафик с www на не-www вариант. Опять же, нам понадобится основной конфигурационный файл Apache, который вы снова открываете с помощью редактора по вашему выбору — например, редактора командной строки nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

В командном блоке найдите следующую строку (с индивидуальным доменом вашего проекта):

ServerAlias www.example.com

Удалите эту строку и прокрутите файл до конца. Добавьте туда следующий новый командный блок «VirtualHost»:

<VirtualHost *:80>
  ServerName www.example.com
  Redirect 301 / https://example.com/
</VirtualHost>

Сохраните и закройте файл. Затем перезапустите Apache, чтобы изменения вступили в силу.

Сложные перенаправления Apache с mod_rewrite.

Для более сложных 301 перенаправлений лучше всего использовать модуль Apache mod_rewrite. Этот модуль быстрый, гибкий и мощный — он дает вам возможность манипулировать URL-адресами простым способом. Вы можете определить соответствующие правила в файле .htaccess.

Включение mod_rewrite на CentOS

В CentOS модуль mod_rewrite включен по умолчанию. Если вы обнаружили, что он не был включен, вы можете включить его в любое время в базовом конфигурационном файле модуля. Для этого сначала откройте файл редактором nano:

sudo nano /etc/httpd/conf.modules.d/00-base.conf

Добавьте следующую строку или включите ее, если она была закомментирована:

LoadModule rewrite_module modules/mod_rewrite.so

На следующем этапе включите использование файлов .htaccess. Для этого откройте основной файл конфигурации Apache.

sudo nano /etc/httpd/conf.d/example.com.conf

Прокрутите вниз до основного командного блока VirtualHost, который должен выглядеть примерно так, как указано ниже:

<VirtualHost *:80>
ServerName example.com
  <Directory "/var/www/example.com/html">
  AllowOverride None
  </Directory>
</VirtualHost>

Измените запись для «AllowOverride» с «None» на «All»:

AllowOverride All

Если запись каталога отсутствует в командном блоке VirtualHost, добавьте ее вручную:

  <Directory "/var/www/example.com/html">
  AllowOverride All
  </Directory>
Примечание

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

Сохраните и выйдите из файла. Перезапустите Apache, чтобы изменения вступили в силу:

sudo systemctl restart httpd

Включение mod_rewrite на Ubuntu

Чтобы включить mod_rewrite на сервере Ubuntu, выполните следующую команду:

sudo a2enmod rewrite

Перезапустите Apache, чтобы изменения вступили в силу:

sudo service apache2 restart

Далее разрешите использование файлов .htaccess. Для этого отредактируйте основной конфигурационный файл Apache:

sudo nano /etc/apache2/sites-available/example.com.conf

Прокрутите вниз до основного командного блока VirtualHost и найдите командный блок директории (Directory), который должен выглядеть примерно так:

<Directory /var/www/example.com/html/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

В строке «AllowOverride» замените запись по умолчанию «None» на «All»:

AllowOverride All

Если запись каталога отсутствует в командном блоке VirtualHost, добавьте ее вручную:

<Directory /var/www/example.com/html/>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

Сохраните и выйдите из файла. Перезапустите веб-сервер, чтобы изменения вступили в силу:

sudo service apache2 restart

Создание файла .htaccess для перенаправления Apache

После настройки Apache на использование mod_rewrite и разрешение файлов .htaccess, пришло время перейти в каталог документов вашего сайта (корневой каталог) и создать файл .htaccess.

Примечание

Вам не нужно перезапускать Apache после внесения изменений в файл .htaccess.

Если вы не внесли никаких изменений, перейдите непосредственно в корневой каталог вашего веб-сервера Apache, набрав следующее:

cd /var/www/html

В каталоге теперь создайте файл .htaccess и откройте его следующей командой:

sudo nano .htaccess

Укажите ваши индивидуальные конфигурации mod_rewrite. Начните с простого теста, чтобы убедиться, что все работает правильно, добавив в этот файл следующие строки:

RewriteEngine on
RewriteRule ^hello.html$ goodbye.html

Это правило перенаправляет запросы на hello.html на страницу goodbye.html. Сохраните и выйдите из файла, а затем создайте два HTML-документа с помощью следующих команд:

sudo echo "Hello" >> hello.html
sudo echo "Goodbye" >> goodbye.html

Теперь откройте страницу hello.html в браузере. Вы должны быть перенаправлены на страницу goodbye.html с помощью перенаправления Apache и увидеть сообщение «Goodbye».

Перенаправление нескольких доменов на один и тот же URL с помощью Apache redirect

Существует несколько причин, по которым вам необходимо перенаправить разные домены на один и тот же адрес:

  • Если ваш основной сайт — example.com, то лучше всего захватить пространство имен, купив example.net и example.org.
  • Имеет смысл также зарегистрировать типичные неправильные написания вашего доменного имени, такие как exampl.com или exmple.com, и включить их в свою стратегию. Таким образом вы защитите себя от так называемого опечатывания.
  • Вы также можете просто владеть вариантами своего доменного имени, такими как the-example.com или my-example.com, которые также должны приводить посетителей на ваш веб-проект.

Хотя вы можете перенаправить эти доменные имена на вашу главную страницу обычным способом, с точки зрения SEO рекомендуется установить 301 редирект для достижения поставленных целей.

Чтобы перенаправить несколько доменов на один домен с помощью Apache redirect, сначала включите модуль mod_rewrite, как описано в предыдущем разделе, и создайте соответствующий файл .htaccess. Затем добавьте следующие строки в файл .htaccess:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www.)?example.net$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301]

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

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www.)?example.net$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]

Apache: Перенаправление с HTTP на HTTPS: как это работает

Для безопасности ваших пользователей и рейтинга в поисковых системах крайне важно, чтобы весь трафик на вашем сайте был защищен с помощью SSL/TLS. Также для этого случая вы можете использовать 301 редирект Apache, который автоматически перенаправляет посетителей на HTTPS-версию ваших страниц.

Опять же, сначала настройте mod_rewrite и файл .htaccess, а затем добавьте следующие строки в файл конфигурации:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com$1 [R=301,L]

Переименование веб-страниц и перемещение каталогов

Бывают ситуации, когда необходимо переименовать существующую страницу или каталог. Это приведет к разрушению всех ссылок, указывающих на эту страницу, что не только ухудшит пользовательский опыт, но и повлияет на SEO.

Используйте следующие правила в файле .htaccess (после настройки mod_rewrite и файлов .htaccess).

Переименовать веб-страницу:

RewriteEngine on
RewriteRule ^old-page.html$ /new-page.html [R=301]

Переименовать каталог:

RewriteEngine on
RewriteRule ^old-directory/ /new-directory/ [R=301]

В приведенных выше примерах имена файлов и каталогов указаны как пути относительно корневого каталога сайта. Существует три варианта пути:

  • полный путь к файловой системе, например /var/www/html/new-page.html
  • веб-путь относительно корневого каталога, например /new-page.html
  • абсолютный URL, например ‘http://example.com/new-page.html’.

Краткое изложение наиболее важной информации о mod_rewrite

Модуль mod_rewrite использует регулярные выражения для подбора и замены URL-адресов. Чтобы включить mod_rewrite, первая строка правил в файле .htaccess всегда должна выглядеть следующим образом:

RewriteEngine on

Сердцем mod_rewrite являются RewriteRules. Каждое правило RewriteRule состоит из трех частей:

RewriteRule [pattern] [substitution] [flags]

Шаблон создается с помощью регулярных выражений. Могут быть сделаны следующие замены:

  • полный путь к файловой системе
  • веб-путь относительно корневого каталога
  • абсолютный URL

Флаги являются необязательными. Некоторые из наиболее распространенных флагов следующие:

  • L: указывает, что это последнее в серии правил.
  • R=301: принудительное 301 перенаправление
  • NC: игнорирует чувствительность к регистру, поэтому правило не чувствительно к регистру.

Полный список доступных флагов можно найти на официальном сайте Apache.

В некоторых случаях правило RewriteRule дополняется параметром RewriteCond. Он определяет условия, при которых правило RewriteRule вступает в силу.RewriteCond также состоит из трех частей:

RewriteCond [test string] [condition] [flags]

Тестовая строка обычно представляет собой переменную сервера в формате %{НАЗВАНИЕ ПЕРЕМЕННОЙ}.

Существует три типа условий:

  • регулярные выражения
  • сравнения строк
  • проверка файла/пути

Флаги в данном случае опять же необязательны. Для RewriteCond доступны три флага:

  • NC: игнорирует регистр, поэтому условие не чувствительно к регистру
  • OR: логическое «или»
  • NV («No Vary»): имя заголовка не будет включено в заголовок ответа Vary.

В чем разница между RewriteRule и redirect?

И RewriteRule, и Apache 301 Redirect могут быть выделены в файле .htaccess для перенаправления трафика сайта.

Основное различие заключается в том, что RewriteRule реализуется модулем mod_rewrite, а redirect — модулем mod_alias.

mod_rewrite mod_alias
использует RewriteRule и RewriteCond использует Redirect и RedirectMatch
очень универсален, так как использует регулярные выражения для подбора и замены URL не очень настраиваемый
может быть сложным в использовании прост в использовании
может быть не установлен или не включен по умолчанию включен по умолчанию в большинстве установок Apache

Оцените статью
cdelat.ru
Добавить комментарий