Как перенаправить один домен в другой, без www на www и применить SSL с файлом .htaccess - PullRequest
0 голосов
/ 06 марта 2019

Я собираюсь выполнить 3 задачи перезаписи в моем файле .htaccess:

  1. Перенаправить example1.com на example2.com
  2. Перенаправление без www на www
  3. Перенаправить http на https

Да, я понимаю, что на все эти вопросы здесь задавались и отвечались индивидуально, но я пытаюсь понять, как объединить эти ответы вместе для максимально эффективного переписывания. Кроме того, когда я пытаюсь реализовать отдельные перезаписи для каждого из этих # 1 или # 2 или # 3, они конфликтуют друг с другом и отправляют меня в цикл перенаправления.

Самым близким, что я смог найти, был Амин Хайюссеф : Перенаправить несколько доменов в папку + без www на www

# redirect non-www to www
ReWriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301]

ReWriteCond %{HTTP_HOST} ^www.domain.com [OR]
ReWriteCond %{HTTP_HOST} ^www.domain.co.uk [OR]
ReWriteCond %{REQUEST_URI} !domain/
ReWriteRule ^(.*)$ domain/$1 [L]

Это то, что у меня сейчас есть в моем файле .htaccess:

# Redirect example1.com to www.example2.com
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteRule ^(.*)$ https://www.example2.com [R=301,L]

# Redirect www.example1.com to www.example2.com
RewriteCond %{HTTP_HOST} ^www.example1\.com$ [NC]
RewriteRule ^(.*)$ https://www.example2.com [R=301,L]

# Force non-www to www
RewriteCond %{HTTP_HOST} ^example2.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]

Проблема в том, что ничего не перезаписывается при переходе на http://www.example2.com, когда он должен применять SSL и переписывать на https://www.example2.com.

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

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2019

Все 3 перенаправления могут быть выполнены в одном правиле перенаправления:

RewriteEngine On

RewriteCond %{REQUEST_SCHEME} =http
RewriteRule ^ https://www.example2.com%{REQUEST_URI} [R=301,L,NE]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example1\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^example2\.com$ [NC]
RewriteRule ^ https://www.example2.com%{REQUEST_URI} [R=301,L,NE]

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

Предполагается, что и example1.com, и example2.com находятся на одном хосте и указывают на один и тот же каталог.

...