htaccess, сайт и тестирование в подпапках

Вопрос или проблема

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

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>

Объяснение настроек

  1. Проверка имени хоста: В основном .htaccess было добавлено условие, которое проверяет имя хоста. Если оно соответствует поддомену wp2, перенаправления не срабатывают.

  2. Стандартные директивы для WordPress: В .htaccess файла для wp2 сохраняются стандартные правила, позволяющие работать сайту. Важно, чтобы в этом файле не было директив, которые могут вызвать конфликты с основным .htaccess.

  3. Отсутствие SSL: Поскольку промежуточный сайт не использует SSL, не требуется никаких перенаправлений на HTTPS для wp2. Если бы вы решили добавить SSL на wp2, вы бы просто добавили соответствующие правила в .htaccess подкаталога.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...