- Вопрос или проблема
- Ответ или решение
- Настройка .htaccess для основного и промежуточного сайтов в отдельных подкаталогах
- Основной файл .htaccess для корневого каталога
- Пример файла .htaccess в корневом каталоге:
- Настройка .htaccess для промежуточного сайта в подкаталоге
- Пример файла .htaccess в подкаталоге /wp2:
- Объяснение настроек
- Заключение
Вопрос или проблема
У меня есть следующая задача, и так как она немного отличается от большинства настроек, я не смог найти никаких подсказок, которые бы решили мою проблему.
WordPress для живого сайта был установлен в подкаталог /wp1
, директивы .htaccess
— это перенаправление на www и https, за которым следуют обычные директивы WP:
<IfModule mod_rewrite.c>
RewriteEngine On
# перенаправить любой запрос на сертифицированный домен для использования www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# перенаправление на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
и index.php
в корне загружает необходимый wp1/wp-blog-header.php
.
Теперь мне нужно настроить тестовую среду в /wp2
с wp2
в качестве поддомена. У поддомена нет SSL-сертификата (но я мог бы легко его получить). Я пробовал несколько модификаций, чтобы перенаправить поддомен на тестовый сайт без https, но все, что я получил до сих пор, это ошибки.
Хотя я не очень хорошо знаком с .htaccess
, я думаю, что первой проблемой является перенаправление с подстановочным знаком на www. Вторым препятствием является перенаправление на https. Мне нужно обоих для рабочего сайта.
Есть ли способ пропустить эти правила в случае обращения к поддомену?
Или в общем, как бы вы это организовали?
Предположим, что подкаталог /wp2
, содержащий тестовый сайт, имеет свой собственный файл .htaccess
(со стандартным контроллером WordPress, см. ниже). Тогда .htaccess
в корневом каталоге должен содержать что-то вроде следующего, выше любых существующих директив, чтобы перенаправить все запросы к поддомену wp2
на подкаталог /wp2
:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(wp2)\.example\.com
RewriteRule (.*) /%1/$1 [L]
Затем “стандартный” контроллер WordPress будет находиться в файле /wp2/.htaccess
(это также предотвращает потенциальный цикл переписывания):
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Обратите внимание, что я полностью удалил директиву RewriteBase
и убрал префикс слэша в последнем RewriteRule
замену. Это сделано для того, чтобы загружать index.php
из /wp2/index.php
, а не из корневого каталога. (Что на самом деле и есть то, как я ожидал, что основной сайт в /wp1
будет настроен.)
Ответ или решение
Настройка .htaccess для основного и промежуточного сайтов в отдельных подкаталогах
Вам необходимо настроить промежуточный сайт WordPress в подкаталоге /wp2
, в то время как основной сайт находится в /wp1
. Один из основных вопросов здесь — изменение директив в файле .htaccess
, чтобы обеспечить правильную работу обеих установок, а также избегать ошибок при переходе на промежуточный сайт. В данном ответе будет рассмотрено, как это можно сделать.
Основной файл .htaccess для корневого каталога
Файл .htaccess
, размещенный в корневом каталоге вашего веб-сайта, содержит директивы, связанные с перенаправлениями на защищенные (HTTPS) версии сайта и поддомен www. Чтобы избежать применения этих правил к поддомену для промежуточного сайта, нужно добавить условия, которые будут проверять, какое имя хоста используется.
Пример файла .htaccess в корневом каталоге:
<IfModule mod_rewrite.c>
RewriteEngine On
# Проверка, если хост — это поддомен wp2
RewriteCond %{HTTP_HOST} !^wp2\.example\.com$
# Перенаправляем непривязанные хосты на www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Перенаправление на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# Инструкции для WordPress
<IfModule mod_rewrite.c>
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Настройка .htaccess для промежуточного сайта в подкаталоге
Для промежуточного сайта, который будет находиться в подкаталоге /wp2
, можно создать отдельный файл .htaccess
. Этот файл будет содержать стандартные директивы для WordPress, которые обеспечивают правильный функционал сайта.
Пример файла .htaccess в подкаталоге /wp2
:
<IfModule mod_rewrite.c>
RewriteEngine On
# Отключаем перенаправления, если это промежуточный сайт
RewriteCond %{HTTP_HOST} ^wp2\.example\.com$ [NC]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
Объяснение настроек
-
Проверка имени хоста: В основном
.htaccess
было добавлено условие, которое проверяет имя хоста. Если оно соответствует поддоменуwp2
, перенаправления не срабатывают. -
Стандартные директивы для WordPress: В
.htaccess
файла дляwp2
сохраняются стандартные правила, позволяющие работать сайту. Важно, чтобы в этом файле не было директив, которые могут вызвать конфликты с основным.htaccess
. -
Отсутствие SSL: Поскольку промежуточный сайт не использует SSL, не требуется никаких перенаправлений на HTTPS для
wp2
. Если бы вы решили добавить SSL наwp2
, вы бы просто добавили соответствующие правила в.htaccess
подкаталога.
Заключение
Ваша конфигурация .htaccess
на основном сайте и промежуточном сайте позволит вам управлять доступом к обоим ресурсам, исключая конфликты и ошибки. Основное внимание уделяется проверке имени хоста, чтобы избежать применения общих правил к поддоменам. В случае возникновения дальнейших вопросов или необходимости в более глубоком анализе, рекомендуем обратиться к документации по Apache для получения дополнительных деталей.