Jak aktivovat OpenCart SSL

Jde o to, jak udělat dvě věci: vynutit SSL na všechny požadavky a přesměrovat doménu na public_html / somefolder - kde žije obsah webu / domény. Doporučení z místa hostování (BlueHost, i když jsem to viděl jinde, je udělat tuto druhou věc pomocí htaccess ve složce public_html:

RewriteEngine on RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] #this next section is what the hosting place says to use # .htaccess main domain to subdirectory redirect # Do not change this line. RewriteEngine on # Change example.com to be your main domain. RewriteCond %{HTTP_HOST} ^(www.)?example.com$ # Change 'subdirectory' to be the directory you will use for your main domain. RewriteCond %{REQUEST_URI} !^/somefolder.c/ # Don't change the following two lines. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Change 'subdirectory' to be the directory you will use for your main domain. RewriteRule ^(.*)$ /somefolder.c/$1 # Change example.com to be your main domain again. # Change 'subdirectory' to be the directory you will use for your main domain # followed by / then the main file for your site, index.php, index.html, etc. RewriteCond %{HTTP_HOST} ^(www.)?example.com$ RewriteRule ^(/)?$ somefolder.c/index.php [R,L] 

Všimněte si, že obsah webu žije ve složce somefolder.c.

O tyto požadavky by se tedy měl postarat htaccess

www.example.com example.com http://example.com https://example.com http://www.example.com https://www.example.com https://www.example.com/somepage.php #this page is in public_html/somefolder.c http://example.com/folderb/somepage.php #this page is in public_html/somefolder.c/folderb 

... a jejich variace.

Nejsem si jistý, že výše uvedený htaccess bude fungovat ve všech těchto situacích. Tak:

  1. Existuje lepší způsob?

  2. Existuje požadavek na samostatný htaccess v somefolder.c složka (obsah „root“)? Pokud ano, co by měl obsahovat?

Raději bych neuspořádal celé místo (přesunutí souborů webu z public_html/somefolder.c do public_html složku.

Přidáno

K tomuto hostitelskému účtu je přidruženo několik domén. Primární doména je www.example.com .

Všiml jsem si, že funguje „první síla SSL“. A záměrem druhé části je mít https://www.example.com přejděte na somefolder.c obsah s https://www.example.com/folderb/somepage.php přejděte na public_html/somefolder.c/folderb/somepage.php soubor.

Že https://www.example.com/folderb/somepage.php požadavek (někdy; ne důsledně) se zobrazí https://www.example.com/somefolder.c/folderb/somepage.php na adresním řádku. Chci https://www.example.com/folderb/somepage.php se zobrazí na řádku adresy. Takže 'somefolder.c'by se nikdy neměl objevit na adresním řádku.

  1. jak to nejlépe udělat se soubory htaccess ve složce public_html
  2. jsou v podsložkách potřeba další soubory htaccess?

  • 1 Funguje síla na SSL?
  • 1 Co ve skutečnosti „nefunguje“ - co se v tuto chvíli stane? Jen pro objasnění, /somefolder.c by měl být uživateli zcela skryt? Pro koncového uživatele to tedy vypadá, že všechny soubory jsou obsluhovány z kořene dokumentu? Je to jen to, že máte směs interních přepisů a externích přesměrování do tohoto podadresáře - což je podle mého názoru nesprávné. Hostujete na tomto účtu více než jednu doménu? Pravděpodobně ještě nemáte žádné jiné .htaccess soubory? Potřebujete být schopni poskytovat jakékoli soubory z kořenového adresáře dokumentu?
  • Upravte otázku tak, aby byla objasněna, jak to vyžadují komentáře.
  • Otázka upravena na žádost.
  • Odstranil jsem „přesměrování“ z názvu. Z vašeho vysvětlení nechcete přesměrování. Přesměrování mění adresu URL a zviditelňují tuto změnu pro uživatele. Chcete „přepsání“, které interně změní způsob, jakým server splňuje požadavek.

K tomuto hostitelskému účtu je přidruženo několik domén. Primární doména je www.example.com

Je trochu nejasné (z vašeho kódu), co chcete dělat s těmito dalšími doménami? Přejete si kanonizovat všechny tyto domény do své „primární domény“, nebo je chcete ponechat oddělené (abyste mohli v různých doménách udržovat odlišný obsah)? Vaše přesměrování HTTP na HTTPS (které podle vás funguje) přesměrovává vše na www.example.com - tak to kanonizuje všechny domény na primární doménu. Všechna pravidla, která následují, výslovně kontrolují tuto doménu v požadavku, jako by se očekávalo více domén - to by se zdálo být zbytečné?

Předpokládám tedy, že by tyto domény měly být kanonizovány. Předpokládám také, že i jiné než www / www by měly být kanonizovány (což v současné době neděláte).

RewriteRule ^(/)?$ somefolder.c/index.php [R,L] 

Také vaše poslední pravidlo vydává externí přesměrování na somefolder.c/index.php - toto se zlomí (pokud jste nedefinovali a RewriteBase někde jinde?). Ale to by bezpochyby mělo být interní přepis, ne externí přesměrování. Je však pochybné, zda je to vůbec nutné.

Zkuste místo toho něco podobného (na základě vaší aktuální sady pravidel):

RewriteEngine on # non-www to www redirect (HTTP and HTTPS) # - Also canonicalises all other domains RewriteCond %{HTTP_HOST} !^www\.example\.com RewriteRule (.*) https://www.example.com/$1 [R,L] # HTTP to HTTPS redirect # HTTP_HOST is guaranteed to be the primary domain by this stage RewriteCond %{SERVER_PORT} 80 RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L] # Rewrite all requests (for non-existent files) to `/somefolder.c` RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule !^somefolder\.c /somefolder.c%{REQUEST_URI} [L] 

Kontrola neexistujících souborů a adresářů nemusí být nutná - ve skutečnosti to nemusí být vůbec žádoucí. To umožňuje, aby existující soubory (a adresáře) byly poskytovány mimo server /somefolder.c adresář. Zabraňuje však také tomu, aby web obsažený v podadresáři zobrazoval svůj vlastní vlastní kód 404 ErrorDocument.

Změňte výše uvedená dočasná (302) přesměrování na 301 pouze když jste si jisti, že to funguje dobře. tj. změna R na R=301.

Před testováním se ujistěte, že je mezipaměť prohlížeče čistá.

Pracoval pro vás: Charles Robertson | Chcete nás kontaktovat?