2009-09-25 23 views
33

Mam kilka domen działających pod jednym plikiem .htaccess, każdy zabezpieczony przez SSL. Muszę wymusić https na każdej domenie, jednocześnie zapewniając przekierowanie na stronę www. Oto, czego używam, która nie działa:. Htaccess przekierowanie www do non-www z SSL/HTTPS

RewriteCond %{HTTP_HOST} ^www.%{HTTP_HOST} 
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L] 

Przykład:

https://www.strategice.com 

należy przekierować do ...

https://strategice.com 

Dzięki z góry!

+2

zaznaczyć prawidłową odpowiedź już! –

Odpowiedz

16

Twój stan nigdy nie będzie prawdziwy, ponieważ brzmi jak "if (a == a + b)".

chciałbym spróbować wykonać następujące czynności:

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

to przechwyci "google.com" z "www.google.com" do 1%, reszta w $ 1, a po tej łącząc 2, gdy HTTP_HOST zaczyna się od www (z lub bez https).

+0

Niestety nadal powoduje błąd "Połączenie nie jest niezaufane", gdy ktoś próbuje uzyskać dostęp do https://www.domain.com – aegenes

+0

Hmm, ale czy poprawnie przekierowuje? Jeśli to może być problem z certyfikatem. – Fabian

+2

Zobacz [to] (http://stackoverflow.com/a/10726167/372643), aby uzyskać certyfikat. – Bruno

2

Ten pracował dla mnie:

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

Certyfikat musi obejmować zarówno www i bez www https. Niektóre certyfikaty dostawcy obejmują zarówno adres www.xxxx.yyy, ale tylko jeden dla xxxx.yyy.

Włącz przepisuje:

RewriteEngine On 

Dodać wszystkie https użytku http:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R=301] 

tylko zrobić https www używać non-www https:

RewriteCond %{SERVER_PORT} 443 
RewriteCond %{HTTP_HOST} ^www[.].+$ 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R=301] 

Nie można przetwarzać non -www https, w przeciwnym razie występuje pętla.

w [L, R = 301]

  1. L = Jeśli zasada przetwarzano nie przetwarza więcej.
  2. R = 301 = Informuje przeglądarkę/robota o konieczności wykonania stałego przekierowania.

bardziej ogólny

Bardziej ogólne podejście - nie zależne od portu - jest:

RewriteCond %{HTTP_HOST} ^www\. 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

aby każdy URL z www upuść go.

RewriteCond %{HTTPS} !on 
RewriteCond %{HTTPS} !1 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTP:X-Forwarded-SSL} !on 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

zmusić niebędące https URL, nawet dla tych systemów w dół od load-wyważarki tą kroplą https, używających protokołu HTTPS.

Należy pamiętać, że nie przetestowałem opcji forwarded, więc docenilibyśmy opinie na temat wszelkich problemów z nimi.Te linie można pominąć, jeśli system nie znajduje się za równoważeniem obciążenia.

DO HTTP_HOST lub nie

Można użyć ${HTTP_HOST} być częścią adresu URL w RewriteRule, czy można używać wyraźny kanoniczną nazwę domeny tekst (xxxx.yyy powyżej).

Określenie nazwy domeny w sposób jawny zapewnia, że ​​w adresie URL dostarczanym przez użytkownika nie są stosowane elementy łagodnie podnoszące znaki, które mogą skłonić twoją stronę do zrobienia czegoś, na co nie może być przygotowana, lub przynajmniej zapewnia, że właściwa nazwa domeny pojawia się na pasku adresu, niezależnie od tego, który ciąg adresu URL otwiera stronę.

Może nawet pomóc w konwersji domen zakodowanych przy użyciu kodu punycode, aby wyświetlać prawidłowe znaki Unicode na pasku adresu.

+0

Działa jako urok! –

+0

Działa niesamowicie! Dziękuję za wyjaśnienie. –

44

www do nie www https

RewriteEngine on 

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

RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+1

"RewriteRule^(. *) $ Http: //% 1/$ 1 [R = 301, L]" zmieniono na "RewriteRule^(. *) $ Https: //% 1/$ 1 [R = 301, L ] "(przez @KenVerhaegen) w przeciwnym razie" najpierw przekierowałoby na inne niż http, a następnie na https ... więc teraz możemy uniknąć potencjalnie wywołanego drugiego przekierowania. " – alexbt

1
RewriteEngine On 

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

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

ten pracował dla mnie po wielu prób i błędów. Część z nich jest od użytkownika powyżej przechwyci www.xxx.yyy i wysłać do https://xxx.yyy

Part 2 patrzy wprowadzonego adresu URL i sprawdza, czy HTTPS, jeśli nie, to wysyła do HTTPS

Sporządzono w tej kolejności, wynika z logiki i nie występuje błąd.

Oto moja pełna wersja w bocznej htaccess z WordPress:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.(.*) 
RewriteRule ^.*$ https://%1/$1 [R=301,L] 

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 


# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 
2

Aby wymusić non-www i https w jednym wniosku, można użyć następującej reguły w htaccess:

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\. [OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ 
RewriteRule^https://%1%{REQUEST_URI} [NE,L,R] 

ten przekierowuje http://www.example.com/ lub https://www.example.com/ to ssl non-www https://example.com/.

Używam R Flaga przekierowania strefy w celu testowania i uniknięcia buforowania przeglądarki. Jeśli chcesz, aby przekierowanie było trwałe, po prostu zmień flagę R na R = 301.

+0

hmm, ale mimo tego, że wchodzę na stronę z www safari mówi, że strona jest niepewna i opera nie chce przekierować żadnej opcji z lub bez www do ssl, dlaczego? –

1

Ref Apache redirect www to non-www and HTTP to HTTPS

http://example.com

http://www.example.com

https://www.example.com

do

https://example.com

RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [L,NE,R=301] 

Jeśli zamiast example.com chcesz domyślny URL być www.example.com, a potem po prostu zmienić trzecim i piątym wiersze:

RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://www.%1%{REQUEST_URI} [L,NE,R=301] 
Powiązane problemy