заставить SSL и нет WWW на Apache - PullRequest
2 голосов
/ 07 февраля 2011

У меня возникают проблемы с правильным синтаксисом для выполнения принудительного SSL и без WWW.

РЕДАКТИРОВАТЬ

Мне удалось выполнитькаждая задача в отдельности, но при объединении двух я обнаруживаю, что застреваю в цикле перенаправления.

рабочий синтаксис для запрета WWW:

RewriteCond %{HTTP_HOST} !^domain\.com$
RewriteRule (.*) http://domain.com/$1 [R=301,L]

Моя попытка запретить WWW и SSL

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} !^domain\.com$
RewriteRule (.*) https://domain.com/$1 [R=301,L]

Спасибо за любые предложения!

Ответы [ 4 ]

1 голос
/ 07 февраля 2011

Для SSL вы можете использовать что-то вроде:

Redirect / https://domain.com/

Поместите это только в раздел вашего виртуального хоста, который вы настраиваете для HTTP, а не HTTPS, чтобы не запускать клиентов в бесконечные циклы.

0 голосов
/ 08 сентября 2014

Я нашел, что это работает для нескольких моих клиентских сайтов:

# Force SSL
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule (.*) https://%1%{REQUEST_URI} [L,R=301]

# Rewrite all http to https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
0 голосов
/ 07 февраля 2011

Вот то, что я использую на одном из моих сайтов - кажется, работает немного лучше, чем большинство других методов, которые я видел:

  # The code below tells apache to always require secure (ssl/tls) connections
  # to the website. If a client tries connecting over port 80 (http://),
  # then the client will be redirected to https:// (over port 443).
  RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
  RewriteCond %{SERVER_PORT} 80
  RewriteRule ^(.*)$ https://example.com/$1 [R,L]

Для правила без www, проверьтеИзвлеките файлы .htaccess в любую CMS с открытым исходным кодом, например, в Drupal или Wordpress, чтобы ознакомиться с лучшими практиками.

0 голосов
/ 07 февраля 2011

Под «нет WWW» я предполагаю, что вы хотите удалить любое «WWW».префикс имени хоста?Попробуйте это:

RewriteCond "%{HTTP_HOST}" "^(?:www\.)?(.*)"  [NC]
RewriteCond "%{HTTPS}"     "=on"
RewriteRule "(.*)"         "https://%1$1"     [R=301,L]

Если вы делаете это в файле .htaccess, измените эту последнюю строку на

RewriteRule "(.*)"         "https://%1/$1"    [R=301,L]

Если вы хотите удалить «WWW»«.Префикс независимо от того, SSL-ность или нет, попробуйте это:

RewriteCond "%{HTTP_HOST}" "^(?:www\.)?(.*)"  [NC]
RewriteCond "%{HTTPS}"     "=on"
RewriteRule "(.*)"         "https://%1/$1"    [R=301,L]

RewriteCond "%{HTTP_HOST}" "^(?:www\.)?(.*)"  [NC]
RewriteRule "(.*)"         "http://%1/$1"     [R=301,L]
...