Minimalizace počtu přesměrování na https

Proč využívat HTTPS protokol namísto HTTP protokolu asi nemá cenu řešit. Nicméně často je k vidění nastavení, kdy pravidla pro přesměrování z protokolu HTTP na HTTPS obsahují nadměrný počet přesměrování. Primárně jde hlavně o to určit si hlavní adresu domény (buď s www nebo bez) a na tu pak přesměrovávat. Přesměrovávat vždy na tu variantu, kterou návštěvník zadal je již nadbytečné.

Test nastavení

Zda u vaší domény dochází k více přesměrováním než je nezbytné, si můžete ověřit na adrese: https://varvy.com/tools/redirects/

Jak docílit správného nastavení

Ukažme si tedy jak docílit správného přesměrování. Níže uvádím dvě správné varianty přesměrování, kdy jsem si vybral jako cílovou adresu https://ambroz.blog/cokoliv.

Varianta 1

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://ambroz.blog/$1 [R=301,L]
</IfModule>

Varianta 2

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/(.*)$ https://ambroz.blog/$1 [R=301,L]
</IfModule>

Publikováno 26.10.2017 v 18:44 | Kategorie: .htaccess

Užitečná pravidla pro .htaccess

Možná se bude někomu hodit pár užitečných pravidel pro .htaccess, která používám. Níže uvedené situace lze samozřejmě řešit i jiným způsobem a použití pravidel závisí na konkrétním nastavení serveru.

Přesměrování nefunkčního odkazu

Pokud se Vám někdy stalo, že jste předělávali stránky a tím i měnili odkazy, které jste buď někde rozeslali či je zaindexoval nějaký vyhledávací robot (doporučuji v tomto směru používat Google nástroje pro webmastery, kde Vám to přímo vypíše jaké Google našel 403, 404 chyby apod.), tak se určitě hodí již neexistující odkaz přesměrovat na nějaký funkční odkaz, nejlépe tedy novější variantu příspěvku, která byla na původním odkaze. Jde to udělat takto:

redirect 301 /lokalni/adresa.xxx http://http.adresa/xxx

Přesměrování na konkrétní odkaz

Na konkrétní URL adresu provedeme přesměrování jednoduše takto:

RewriteCond %{HTTP_HOST} ^(www\.)?domena\.koncovka$
RewriteRule .* http://domena.koncovka/XXX [R=301,L]

Nasměrování domény s www na doménu bez www

Jestli máte raději adresy bez www, tj. přímo ve znění http://domena.koncovka, potom můžete použít toto:

RewriteCond %{HTTP_HOST} ^www.domena.koncovka
RewriteRule (.*) http://domena.koncovka/$1 [R=301,QSA,L]

Nasměrování domény s https s www na doménu bez www

Pro https se výše uvedené pravidlo nastavuje takto:

RewriteCond %{HTTP_HOST} ^www.vaclavambroz.cz$
RewriteCond %{SERVER_PORT} ^443
RewriteRule ^(.*)$ https://vaclavambroz.cz/$1 [R=301]

Povolení přístupu na stránky jen z určité IP adresy

Využíváte nějaké stránky pouze pro soukromé či firemní účely? Chcete tam mít přístup pouze z Vaší IP adresy? Mělo by postačit nastavit:

deny from all
allow from XX.XX.XX.XX

Obdobně se to dá nastavit pokud chcete jen zakázat přístup na Vaše stránky z konkrétní IP adresy:

deny from XX.XX.XX.XX XX.XX.XX.XX XX.XX.XX.XX
allow from all

Nasměrování domény do určitého adresáře webhostingu

Pro využívání více domén na jednom hostingu, kdy další domény se načítají z různých adresářů, lze použít:

RewriteCond %{HTTP_HOST} domena.koncovka$ [NC]
RewriteCond %{REQUEST_URI} !adresar/.*$
RewriteRule ^(.*)$ adresar/$1 [L]

Zaheslování stránek

Pro zaheslování stránek se dá jednoduše využít pravidel v .htaccess s přístupy uloženými v .htpasswd. Pravidla v tomto případě budou vypadat takto:

AuthType basic
AuthName "pro pristup je vyzadovana autorizace"
AuthUserFile /cesta/k/.htpasswd
Require valid-user

Než vložíte login a heslo do .htpasswd, je potřeba heslo zašifrovat. Učinit tak můžete např. zde. Obsah .htpasswd pak bude:

login:zasifrovane_heslo

Definování cest k 403 a 404

Pokud chcete využívat vlastní chybové stránky, je možné nadefinovat k nim cesty takto:

ErrorDocument 404 /cesta_k_souboru
ErrorDocument 403 /cesta_k_souboru

Přesměrování jakékoliv adresy v adresáři

Jakmile máte adresář, kde máte více adres a není zrovna ideální přesměrovávat každou z nich zvlášť, je možné přesměrovat vše v adresáři na konkrétní http adresu:

RewriteRule ^adresar/.*$ http://cokoliv/cokoliv/cokoliv [R=301,L]

Skrytí informace o verzi Apache a operačním systému

Z důvodu bezpečnosti se často doporučuje skrývat verzi Apache na serveru a operační systém na kterém server běží. Toho docílíme přidáním tohoto pravidla:

ServerSignature Off

Zakázání Directory Browsing

Pokud z nějakého důvodu chcete zakázat procházení složkami a soubory na serveru, tj. tzv. Directory Browsing, pak stačí přidat pravidlo:

Options All -Indexes

Zakázání konkrétního robota

Pokud chceme zakázat přístup nějakému robotovi, např. Semrush, lze to v rámci .htaccessu nastavit takto:

RewriteCond %{HTTP_USER_AGENT} "SemrushBot"
RewriteRule . - [F]

Zabezpečení WordPressu

V tomto směru jsem již doporučoval pravidla v tomto příspěvku, ale pro úplnost to uvádím i zde:

#user-agent
<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
</ifModule>

#utoky
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

#omezeni pristupu do administrace na IP
#<IfModule mod_rewrite.c>
#RewriteEngine on
#RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
#RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
#RewriteCond %{REMOTE_ADDR} !^XX\.XX\.XX\.XX$
#RewriteRule ^(.*)$ - [R=403,L]
#</IfModule>

Publikováno 23.8.2013 v 10:39 | Kategorie: .htaccess