Подтвердить что ты не робот

Необходимо перенаправить весь трафик на https

Я хочу перенаправить любой трафик, который идет на http://example.com на https://example.com

для http://example.com/about в https://example.com/about

Я думал, что это будет примерно так:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
4b9b3361

Ответ 1

Это работает для меня:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Если трафик поступает по HTTP-протоколу без SSL, перенаправляйте его на HTTP-эквивалент любой страницы, с которой пользователь пытался получить доступ. Он также не включает никаких параметров mod_rewrite, поэтому их легко читать.

Сторонний вопрос: почему все считают необходимым явно указать HTTP-код переадресации и пометить один из своих переписаний как "последний"? Серьезно, я видел десятки одинаковых правил htaccess только за последние несколько дней.

Ответ 2

Согласно документации Apache, использование mod_alias более подходит, чем mod_rewrite для этой задачи. То есть, чтобы перенаправить весь HTTP-трафик на HTTPS, можно было бы:

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

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost >

Две вещи, чтобы отметить эту конфигурацию:

  • Чтобы эта конфигурация работала, вам нужен доступ к файлу конфигурации основного сервера. Директива VirtualHost действительна только в контексте конфигурации сервера.
  • Имейте в виду, что директивы mod_rewrite обрабатываются перед директивами mod_alias. Если у вас уже есть массив RewriteRule в вашем файле .htaccess, вам может быть лучше с конфигурацией mod_rewrite.

Ответ 3

Это предыдущий ответ используя .httaccess, но добавляя изменения, предлагаемые в комментариях, а некоторые из меня:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://my.domain.name%{REQUEST_URI} [L,R=301]

Примечания:

  • Это относится к случаям, когда пользователь не имеет доступа к основной конфигурации, но имеет доступ к правилам .htaccess. Если у вас есть доступ к основной конфигурации, используйте решение mod_alias.
  • Для меня правило не было выбрано без определения RewriteBase. Явное определение этого параметра избавляет от двусмысленности с некоторыми настройками сервера.
  • Для явного имени хоста вы не полагаетесь на заголовок Host на стороне клиента, что создает некоторые значительные проблемы. Тем не менее, это нагло предполагает, что существует только один домен для перенаправления.
  • R=301 означает, что это постоянное перенаправление, как это обычно должно было быть в этом случае. Если вы считаете это временным, это можно опустить.
  • L означает, что последнее правило применяется к этому запросу. Оставьте это, если вы подозреваете или знаете, что после этого есть другие правила, которые вы не хотите применять. Вы можете удалить, если это единственное правило файла.