Htaccess peradresuoja į https: // www

Turiu šį htaccess kodą:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond !{HTTPS} off RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> 

Noriu, kad mano svetainė būtų nukreipta į https://www. naudojant HTTPS ir naudojote www. subdomeną www. bet kai gaunu prieigą prie http://www. (be HTTPS), jis peradresuoja mane į https://www naudojant HTTPS.

261
20 дек. nustatyti bigben 20 dec. 2012-12-20 20:58 '12 at 20:58 2012-12-20 20:58
@ 13 atsakymų

Jei norite pirmiausia įjungti HTTPS, turite %{HTTPS} off teisingą aplinkos kintamąjį %{HTTPS} off , tačiau aukščiau esančioje taisyklėje pridedama www. Kadangi turite antrą taisyklę, kad būtų užtikrinta atitiktis www. nenaudokite to pirmojoje taisyklėje.

 RewriteEngine On RewriteCond %{HTTPS} off # First rewrite to HTTPS: # Don't put www. here. If it is already there it will be included, if not # the subsequent rule will catch it. RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Now, rewrite any request to the wrong domain to use www. # [NC] is a case-insensitive match RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Apie priartinimą

Kai už kai kurių prokuratūros formų, kai klientas prisijungia per HTTPS per tarpinį serverį, apkrovos balansavimą, keleivių taikymą ir tt, %{HTTPS} kintamasis niekada negali būti on ir sukelti perrašymo ciklą. Taip yra dėl to, kad jūsų programa faktiškai gauna paprastą HTTP srautą, nors klientas ir proxy / apkrovos balansuotojas naudoja HTTPS. Tokiais atvejais vietoj %{HTTPS} kintamojo patikrinkite X-Forwarded-Proto antraštę. Šis atsakymas rodo atitinkamą procesą.

541
22 дек. Michael Berkowski atsakymas gruodžio 22 d 2012-12-22 00:34 '12 0:34 2012-12-22 00:34

Michalsas atsakė man, nors ir su vienu nedideliu pakeitimu:

Problema:

kai turite vieną svetainės saugumo sertifikatą , naršyklė, bandanti pasiekti jūsų puslapį be https: // www. (arba bet kuris domenas, kuriam taikomas jūsų sertifikatas) bus rodomas bjaurusis raudonas įspėjamasis ekranas, kol jis netgi gauna nukreipimą į saugų ir teisingą https puslapį.

border=0

Sprendimas

Pirma, naudokite peradresavimą į www (arba bet kurį domeną, kuriam taikomas jūsų sertifikatas), ir tik tada nukreipkite https. Tai užtikrina, kad jūsų naudotojai nepatirs jokios klaidos, nes naršyklė mato sertifikatą, kuris netaikomas dabartiniam URL.

 #First rewrite any request to the wrong domain to use the correct one (here www.) RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] #Now, rewrite to HTTPS: RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
134
22 окт. Atsakymą pateikė Larzan 22 d. 2013-10-22 08:48 '13, 8:48, 2013-10-22 08:48

Jei naudojate „CloudFlare“ arba panašų CDN, gausite begalinę ciklo klaidą su {HTTPS} čia siūlomais sprendimais. Jei esate „CloudFlare“ naudotojas, turite tai naudoti:

 RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
92
14 нояб. Atsakymą pateikė Andrew , lapkričio 14 d. 2014-11-14 02:30 '14, 2:30 2014-11-14 02:30

BAD SPRENDIMAS IR KODĖL!

Niekada nenaudokite aukščiau pateikto sprendimo, nes, kai naudojate jų kodą,

 RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301] 

Naršyklė eina į:

 http://example.com 

Tada nukreipia į:

 https://example.com 

Tada nukreipia į:

 https://www.example.com 

Tai yra per didelis serverio prašymas.


Geriausias sprendimas ir atsakas

Šis kodas turi sąlygą [OR] kad būtų išvengta pasikartojančių URL pakeitimų!

 RewriteEngine on RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L] 

Dauguma atsakymų netgi priimami, nenaudokite šio triuko.

40
27 марта '17 в 20:22 2017-03-27 20:22 atsakymą pateikė Amir Forsati, kovo 27 d., 17 d., 20:22 2017-03-27 20:22

Tai geriausias būdas rasti tarpinius, o ne tarpinius.

 RewriteEngine On ### START WWW  HTTPS # ensure www. RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # ensure https RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ### END WWW  HTTPS 
26
09 сент. atsakymas pateikiamas llioor 09 sep . 2016-09-09 19:09 '16 at 19:09 2016-09-09 19:09

Yra daug sprendimų. Čia yra nuoroda į wiki, kuri tiesiogiai sprendžia šią problemą.

http://wiki.apache.org/httpd/RewriteHTTPToHTTPS

 RewriteEngine On # This will enable the Rewrite capabilities RewriteCond %{HTTPS} !=on # This checks to make sure the connection is not already HTTPS RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] # This rule will redirect users from their original location, to the same location but using HTTPS. # ie http://www.example.com/foo/ to https://www.example.com/foo/ # The leading slash is made optional so that this will work either in httpd.conf # or .htaccess context 
24
23 мая '14 в 10:47 2014-05-23 10:47 Atsakymą pateikė Vynz , gegužės 23 d., 14 d., 10:47, 2014-05-23 10:47

Norėdami nukreipti http: // arba https: // į https: // www , galite naudoti šią taisyklę visoms „apache“ versijoms:

 RewriteEngine on RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R] 

Apache 2.4

 RewriteEngine on RewriteCond %{REQUEST_SCHEME} http [OR] RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R] 

Atkreipkite dėmesį, kad kintamasis% {REQUEST_SCHEME} yra naudojamas su apache 2.4 .

10
27 апр. atsakymas, kurį pateikė Starkeen 27 Bal 2016-04-27 06:40 '16 at 6:40 2016-04-27 06:40

Jei naudojate „CloudFlare“, įsitikinkite, kad naudojate kažką panašaus.

 # BEGIN SSL Redirect <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> # END SSL Redirect 

Tai padės sutaupyti iš peradresavimo ciklo ir saugiai nukreipti jūsų svetainę į SSL.

PS Tai gera idėja, jei patikrinate mod_rewrite.c!

8
10 июля '16 в 7:52 2016-07-10 07:52 Ahmad Awais atsakymas liepos 16 d., 16 d., 07:52 am 2016-07-10 07:52
 RewriteEngine On RewriteCond %{HTTP_HOST} !^www. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 

Pastabos: įsitikinkite, kad atliksite šiuos veiksmus.

  1. sudo a2enmod perrašyti
  2. paleiskite „sudo apache2“ paslaugą
  3. Pridėti į savo vhost failą, esantį adresu /etc/apache2/sites-available/000-default.conf
 <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all Require all granted </Directory> 

Dabar jūsų .htaccess veiks ir jūsų svetainė bus nukreipta iš http: // į https: // www.

0
08 сент. Atsakymas pateikiamas Kundan roy 08 sep . 2018-09-08 00:41 '18, 12:41 val. 2018-09-08 00:41
 RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R] 
0
14 дек. Atsakymą pateikė Anastasia Yermolik, gruodžio 14 d. 2018-12-14 17:05 '18, 5:05 val. 2018-12-14 17:05

Bandau atsakyti pirmiausia ir tai neveikia ... Šis darbas:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{ENV:HTTPS} !=on RewriteRule ^.*$ https://%{SERVER_NAME}%{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 
0
30 авг. atsakymą pateikė Jackssn 30 rug . 2018-08-30 17:45 '18 at 5:45 pm 2018-08-30 17:45

Įdiekite į .htaccess failą

 RewriteEngine On RewriteCond %{HTTP_HOST} !^www. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
0
25 июля '17 в 17:17 2017-07-25 17:17 atsakymą davė Adomas Kozlowskis liepos 17 d. 17, 17:17 2017-07-25 17:17

Tai veiks tiek https, tiek www.

 RewriteCond %{HTTPS} !=on # This checks to make sure the connection is not already HTTPS RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
-2
20 мая '15 в 19:14 2015-05-20 19:14 atsakymą pateikė „ Nadeem“ Kaip gegužės 20, 15, 19:14, 2015-05-20 19:14