Окружающая среда:
Wordpress работает на контейнере Docker, который создает конвейер тестирования, сначала в dev (https://dev.example.com
), затем в stage (https://stage.example.com
), а затем, наконец, в производство (https://www.example.com
).
Обратите внимание, что и Dev, и Stage не имеют поддомен "www", а производство -.
Проблема:
По соображениям безопасности мне нужно настроить дополнительное перенаправление. В настоящее время, когда пользователь заходит на наш сайт без SSL (т. Е. http://example.com
), он перенаправляется на защищенный поддомен (т. Е. https://www.example.com
).
Однако в целях безопасности им необходимо нажать https://example.com
, прежде чем будет перенаправлен на защищенный поддомен. Такие как:
1) http://example.com
->
2) https://example.com
->
3) https://www.example.com
У нас должен быть www в качестве конечного результата, и у нас должен быть дополнительный редирект (к сожалению, нет места для маневра).
Теперь, где я застреваю, это с этим перенаправлением и сайтами dev / stage.
Я могу получить перенаправление продукции с http://example.com
-> https://example.com
-> https://www.example.com
с кодом ниже:
<IfModule mod_rewrite.c>
RewriteEngine On
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} example.com$
RewriteRule ^ https://example.com [L,R=301]
# ensure www.
RewriteCond %{HTTP_HOST} !^www\.example.com$ [NC]
RewriteRule ^ https://www.example.com [L,R=301]
</IfModule>
Но когда этот код перемещается в dev / stage, они 502 до смерти.
Я попытался с помощью приведенного ниже кода перенаправить на www только тогда, когда сервер не www или dev или stage, но тогда перенаправление с http://example.com
на https://example.com
завершилось неудачей!
<IfModule mod_rewrite.c>
RewriteEngine On
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} example.com$
RewriteRule ^ https://example.com [L,R=301]
# ensure www only if not dev/stage
RewriteCond %{HTTP_HOST} !^(www|dev|stage)\.example.com$ [NC]
RewriteRule ^ https://www.example.com [L,R=301]
</IfModule>
Пожалуйста, помогите! Я знаю, что использование такого большого количества перенаправлений является чрезмерным, но это требования, которые мне были даны, и я не могу их изменить.
Любая помощь действительно приветствуется, я посмотрел здесь много других ответов, и они помогли, но я не могу пройти через сбой перенаправления dev / stage. Я застрял!
Мой полный файл htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} (^|\.)example\.com$
RewriteRule ^/?(.*)$ https://%{HTTP_HOST}/$1 [R=302]
# ensure www.
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} !^(www|corp-dev|corp-stage)\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/$1 [R=302]
# link Redirection
RewriteEngine On
RewriteRule ^health\.html$ "/health.html" [END]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>