2011-02-07 3 views
2

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

EDIT

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

работает синтаксис, чтобы заставить не 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] 

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

ответ

1

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

Redirect/https://domain.com/ 

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

0

Под «нет 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] 
+0

@RoUS я не смог получить один из этих примеров, чтобы работать должным образом. –

+0

@ Stephen Что случилось, точно? (/ меня проверяет) – RoUS

+0

@RoUS Абсолютно ничего не происходит. –

0

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

 
    # 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] 

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

+0

Ваш синтаксис отлично работает для перенаправления на SSL, спасибо.К сожалению, я могу выполнить оба умения отдельно, но, комбинируя их, я обнаружил, что застрял в цикле переадресации. RewriteCond% {HTTP_HOST}!^Domain \ .com $ RewriteRule (. *) Http://domain.com/$1 [R = 301, L] –

+0

Да, это проблема, не так ли. Мне не приходилось делать это одновременно на любом из моих сайтов. – geerlingguy

+0

Да, это первый раз, когда у меня все получилось. Я должен заставить 1 тип системы URL, чтобы мои Jquery-записи соответствовали родительскому URL-адресу. (например: если URL-адрес domain.com jquery должен использовать domain.com, а не www.domain.com) –

0

Я нашел эту работу на пару моих сайтов клиентов:

# 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} 
Смежные вопросы