Трябва да принудя целия трафик за всички страници на example.com да се https://www.example.com . След много googles и документи за помощ на хостинг сайта, консенсусът (и това, което моят хостинг - BlueHost - документите казват да направя) е следният:

RewriteEngine on RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R] 

Което изглежда, че трябва да работи. Но когато въвеждам само example.com в браузър (FF или Chrome), заявката се пренасочва към

https://www.example.com/https:/www.example.com/ 

Правилото е в горната част на файла htaccess, така че не разбирайте защо това се случва.

RewriteRule ^(.*)$ https://www.example.com/$1 [R] 

Вероятно имате нужда от L (last) флаг. т.е. [R,L]. В противен случай тази директива е в горната част на .htaccess файл, обработката ще продължи през файла и е вероятно да бъде пренаписана отново - така че буквално всичко може да се случи. (Ще се изненадам, ако документите на Bluehost не включват това?)

Също така, след като потвърдите, че това работи добре, трябва да промените това на постоянно (301) пренасочване. т.е. [R=301,L].

  • Благодаря. Така че (за да разбера по-добре), флагът "L" ще спре обработката на htaccess и RewriteRule ще инициира нова заявка, което ще доведе до повторен достъп до правилото htaccess (ако приемем, че има повече към файла htaccess, който там е). Флагът "L" ще спре всякакви по-нататъшни обработки на правилата за htaccess, когато условието е изпълнено за това RewriteRule. По-близо ли съм до правилното разбиране?
  • Да, нещо такова (мисля) ... В .htaccess на L флаг спира текущ пропуск чрез файла. Тъй като a Redirect е зададено, Apache сега изпраща отговор на пренасочване (302) обратно към клиента (браузъра). (Първата заявка приключва тук.) След това клиентът изпраща втора заявка, този път за https://.... Тъй като (втората) заявка вече е порт 443 (т.е. HTTPS), първото правило не съвпада. След това обработката продължава през .htaccess файл.
  • Имайте предвид, че L флаг не спира цялата обработка на .htaccess файл. Процесът ефективно „започва отначало“ (освен ако не се задейства пренасочване) и ще продължи да се завърта, докато URL адресът премине през непроменен.
  • Мисля, че това работи, но има допълнителен проблем с пренасочването на домейна към папка (домейнът сочи към папката public_html, но основното съдържание „живее“ в папка public_html / somefolder. Комбинацията от принуждаване на https и пренасочване на домейн към папката somefolder не работи, използвайки синтаксиса, предоставен от хоста. Тъй като това е различен въпрос, аз създавам нов, вместо да редактирам този - и тъй като отговорът ви е верен за оригиналния въпрос. Благодаря.
  • Дали сайтът обслужва файлове от поддиректория или не, не трябва да е свързан с това канонично пренасочване на HTTP към HTTPS. Ще разгледам новия ви въпрос.

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?