Přesměrování z HTTP na HTTPS

Velice jednoduchý kód, který vložíte do souboru .htaccess:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Toto zajistí, že pokud zadáme URL s http://, automaticky nás to přesměruje na verzi s https://. Dejte si pozor, abyste tak měli nastaveny i Vaše webové stránky, potažmo PHP skripty! Jinak by vznikla smyčka přesměrování – web by chtěl HTTP a .htaccess zase HTTPS (a Vy také).

Kód přesměrovává jak doménu, tak i obsah za lomítkem – pokud to nechcete, odstraňte {REQUEST_URI}.

[R=301] dává prohlížeči vědět, že se jedná o permanentní přesměrování. To znamená, že prohlížeč se již sám nebude snažit navštívit HTTP verzi, ale rovnou bude chodit na verzi s HTTPS.

Můžeme využít také obdobný zápis .htaccess. Toto použijte, pokud se Vám korektně nepřesměrovávají podstránky za lomítkem:

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

Nechceme-li používat .htaccess, můžeme do hlavičky každého PHP souboru vložit následující:

<?php
if ($_SERVER['HTTP'] == "on") {
$url = "https://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
header("Location: $url");
exit;
}
?>

Odstranění .php, .html, .htm přípon souborů pomocí .htaccess

Dnes si ukážeme návod na to, jak pomocí souboru .htaccess skrýt přípony souborů. Je to jednoduché, do souboru .htaccess přidejte následující řádky a vždy jen změňte to, jakou příponu chcete skrýt. Ukážu pár příkladů…

Skrytí přípony .php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

 

Skrytí přípony .html

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

 

Skrytí přípony .htm

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.htm [NC,L]

 

Výše uvedené příklady vždy virtuálně odstraní přípony souborů. To znamená, že pokud budeme mít soubor kontakt.php  na doméně example.com, tak pro něj budou stále existovat dvě adresy

  • example.com/kontakt.php
  • example.com/kontakt

Obě dvě URL zobrazí ten samý obsah souboru kontakt.php uloženém na FTP.

Přesměrování všech odkazů na novou doménu – .htaccess

Pokud stěhujete své webové stránky na novou doménu, je nejlepší zachovat všechny odkazy, které na Váš web vedou tak, aby se i po přestěhování na jinou doménu zobrazil stejný obsah.

Samozřejmě u některých CMS to není snadné, ale jde to snad všude. A to i za cenu ručního přepisování. Cenu to nemá snad u stovek URL.

Vlastníte doménu mujweb.cz na kterém se nachází Vaše prezentace, rozhodli jste se ale, že celý web přestěhujete na novou doménu mujnovyweb.cz. Co s tím? Na mujweb.cz vede spousta zpětných odkazů a ty určitě nechcete jen tak zahodit…

Řešením je přesměrování v souboru .htaccess!

Ano, jen je potřeba mít pro starou doménu stále aktivní webhosting, ale to v dnešní době (2016) multihostingů a VPS již není problém. V rootu (kořenové složce) domény mujweb.cz vytvořte soubor .htaccess a vložte do něj

RewriteEngine On
RewriteRule ^(.*)$ http://mujnovyweb.cz/$1 [R=301,L]

A to je všechno!

Stačí jen změnit http://mujnovyweb.cz za novou URL vaší domény.

Nyní při zadání http://mujweb.cz to klienta automaticky přesměruje na http://mujnovyweb.cz. Dokonce i při zadání http://mujweb.cz/podstranka se to také přesměruje na http://mujnovyweb.cz/podstranka.

Let’s Encrypt certifikát na Windows Apache serveru

Pro SSL certifikát zdarma od Let’s Encrypt existuje oficiální nástroj pro jeho jednoduché vygenerování a nastavení. Ovšem pouze pro Linux.

Ti, co mají Windows si tedy musí poradit jinou cestou. A jelikož se nikomu nechce nastavovat složitě konfigurační soubory, posílat požadavky pro vygenerování certifikátu, stahování souborů certifikační autority a mnoho dalšího, je zde určitá cesta.

Z GitHubu si stáhněte nejnovější verzi konzolového prográmku lets-encrypt-win-simple v1.9.1 (záloha, pokud by link nefungoval zde). Soubor .zip rozbalte do nějakého umístění, kde máte zaručeno, že bude moci jakýkoliv uživatel zapisovat. Buďto tedy rozbalte soubor například do C:\letsencrypt-win-simple, nebo v dalším kroku spusťte aplikaci jako administrátor (správce).

Předpokládejme tedy, že všechny rozbalené soubory se nacházejí ve složce C:\letsencrypt-win-simple. Otevřete si cmd, doporučuji ho spustit jako správce (levý klik na cmd > Spustit jako správce). Můžete ho také vyvolat klávesovou zkratkou Win + R > cmd > zakliknout „Spustit jako správce“.

 

Zadejte příkaz:

cd C:\letsencrypt-win-simple

Tím se s celým CMD „přesunete“ do složky našeho rozbaleného prográmku. Nyní zadejte příkaz pro spuštění aplikace letsencrypt.exe. Zároveň jí pošleme pošleme pár parametrů:

letsencrypt.exe --manualhost <doména> --webroot <složka-s-daty-domény> --test
  1. letsencrypt.exe [tímto dáváme CMD příkaz, aby nadále pracoval s aplikací letsencrypt.exe]
  2. –manualhost [definujeme, že chceme zadávat příkazy manuálně]
  3. <doména> [zaměňte za opravdový název Vaší domény, pro kterou chcete vygenerovat certifikát]
  4. –webroot [definujeme, že další uváděný údaj bude cesta k rootu domény]
  5. <složka-s-daty-domény> [zaměňte za absolutní cestu (bez uvozovek) k root adresáři se soubory Vaší domény]
  6. –test [přidáváme identifikátor –test, pro případ, kdyby se něco nezdařilo, aby se něco nepokazilo na serveru]

 

Váš příkaz by měl vypadat nějak takto:

letsencrypt.exe --manualhost www.mujskript.cz --webroot "C:\xampp\htdocs\mujskript.cz" --test

Stiskněte Enter a odešlete. Mělo by se Vám otevřít nové okno CMD, které bude mít v záhlaví adresu umístění Vašeho letsencrypt.exe souboru. Program začne odesílat požadavky na server letsencrypt pro vygenerování certifikátu.

Pokud se začne vypisovat do konzole něco podobné tomuto:

Authorizing Identifier <doména> Using Challenge Type http-01
 Writing challenge answer to <složka-s-daty-domény>\.well-known/acme-challenge/<challenge-text>
 Answer should now be browsable at <document-root>/.well-known/acme-challenge/<challenge-text>
 Submitting answer
 Refreshing authorization
 Authorization Result: valid

Requesting Certificate
 Request Status: Created
 Saving Certificate to C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\<doména>-crt.der
 Saving Issuer Certificate to C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\ca-<unikátní-id>-crt.pem
 Saving Certificate to C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\<doména>-all.pfx

(Do hranatých závorek jsem uvedl proměnné, které se budou lišit v závislosti na konfiguraci Vašeho serveru.)

Tak byste ve složce

C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org

měli najít nově vygenerované certifikáty, v jejichž názvu bude název domény pro kterou byly vystaveny. Pokud byste je tam nenašli, přidejte do Vaší httpd.conf konfigurace k Vašemu názvu u VirtualHost (viz. níže) domény alias pro přístup do složky, kde se ověřuje pravost domény:

Alias /.well-known <domain-root>/.well-known

Takže by to mělo vypadat nějak takto (cestu lze uvést i bez uvozovek, ale dejte pozor, aby cesta neobsahovala mezery)

Alias /.well-known "C:/xampp/htdocs/mujskript.cz/.well-known"

A znovu spusťte proces ověření přes CMD. Pokud se povede, spusťte jej ještě bez přídomku –test.

Program by se Vás dále měl zeptat na to, jestli chcete certifikáty obnovovat ručně, nebo automaticky. Odpovídáte ano/ne klávesami y/n. Nutno podotknout 2 věcí a to

  • pokud odpovíte ne, program se ukončí
  • pokud pošlete příliš požadavků pro jednu doménu na servery Let’s Encrypt, další generování se samo ukončí a již Vás dále nepustí.

 

Poté, co již ve Výše zmíněné složce naleznete vygenerované soubory, otevřete si soubor httpd-vhosts.conf (samozřejmě můžete i soubor httpd.conf) a měli byste v něm najít informaci o nezabezpečeném HTTP spojení:

<VirtualHost *:80>
 #Definujeme základní proměnné
 ServerAdmin email@administratora
 ServerName mujskript.cz
 ServerAlias www.mujskript.cz

 #Tady jste vložili alias, pokud Vám nefungovalo ověření
 Alias /.well-known "C:/xampp/htdocs/mujskript.cz/.well-known"

 RewriteEngine On
 #Nastavíme přesměrování z HTTP verze na HTTPS verzi
 RewriteCond %{HTTPS} off
 RewriteRule ^/?(.*)$ https://mujskript.cz/$1 [NE,L,R=301]
</VirtualHost>

(Pokud tam výše uvedený kus kódu nemáte, vložte jej kvůli přesměrování (může být i v jiných .conf souborech). Je to na Vás, ale vložení není povinné, protože následné přesměrování nemusíte řešit .conf souborem, ale .htaccess souborem v rootu domény.)

Následně přidejte ještě povinný kód pro SSL (HTTPS) komunikaci:

<VirtualHost *:443>
 #Definujeme základní proměnné
 ServerAdmin email@administratora
 ServerName mujskript.cz
 ServerAlias www.mujskript.cz
 RewriteEngine On 
 
 #Tady jste vložili alias, pokud Vám nefungovalo ověření
 Alias /.well-known "C:/xampp/htdocs/mujskript.cz/.well-known"

 #Nastavíme přesměrování z HTTP verze na HTTPS verzi
 RewriteCond %{HTTP_HOST} !^mujskript.cz$ [NC] 
 RewriteRule ^/?(.*)$ https://mujskript.cz/$1 [NE,L,R=301]
 

 SSLEngine on 
 SSLCertificateFile "C:/Users/<uživatel>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<doména>-crt.pem" 
 SSLCertificateKeyFile "C:/Users/<uživatel>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<doména>-key.pem" 
 SSLCertificateChainFile "C:/Users/<uživatel>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/ca-<unikátní-id>-crt.pem" 
</VirtualHost>

Zdě si všimněte, že již neuvádíme port 80 pro nezabezpečenou HTTP komunikaci, ale port 443 pro zabezpečenou HTTPS komunikaci.

Zbytek kódu jsme akorát opsali z předchozí 80 portové definice až na to, že jsme ještě přidali SSLEngine, jenž jsme zapnuli. A pod ním jsme nadefinovali jednotlivé cesty k jednotlivým certifikátům (absolutní cesty v uvozovkách).

Pokud Vám předtím nefungovalo automatické vygenerování certifikátů, opět i u portu 443 uveďte alias pro .well-know složku.

V příštím článku si ukážeme, jak nastavit soubor .htaccess pro automatické přesměrování na HTTPS variantu a naopak.

Nyní už stačí jen restartovat Apache a vše by mělo běžet. 🙂

Mod_rewrite – hezké url adresy

Taky chcete mít na svém webu ty hezké URL adresy? Řeší se pomocí .htaccess a mod_rewrite. Váš hosting ale musí podporovat soubor .htaccess. Tady je kód, obarvil jsem ho a níže si ho vysvětlíme. Jsou dva typy – přesměrování a podstrčení.

Přesměrování

Redirect 301 uplne-dlouhy-nazev-souboru-kontakt.php kontakt

Nyní vysvětlení:

Redirect 301 je název „procesu“ – nechte tak, jak to tady je

uplne-dlouhy-nazev-souboru-kontakt.php je adresa souboru tak, jak ho vidíme v adresáři – změňte si

kontakt je „přejmenovaný soubor uplne-dlouhy-nazev-souboru-kontakt.php – jen se v adresním řádku objeví kontakt. Název může být libovolný – změňte si.

 

 

Podstrčení

RewriteEngine on
RewriteRule napsana-stranka podstrcenastranka.php

napsana-stranka je stránka, která je v adresním řádku – ta se nezmění

podstrcenastranka.php je název souboru, tak jak se jmenuje v adresáři a obsah této stránky se zobrazí po zadání napsané stránky.

Dotazy prosím směřujte do komentářů. Děkuji