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;
}
?>

Hromadné najít & nahradit v MySQL databázi

Pakliže migrujeme webové stránky spolu s databází, je nutné nahradit veškeré výskyty např. staré domény za tu novou.

Jelikož phpMyAdmin nepodporuje hromadné najít&nahradit (lze to udělat pouze v předem definovaných tabulkách a sloupcích), musíme si pomoci vlastním PHP skriptem, který vše obstará za nás:

<?php
// připojení k databází
$server= "server";
$jmeno = "jmeno";
$heslo = "heslo";
$databaze = "databaze";

mysql_connect($server, $jmeno, $heslo);

// jake stringy - retezce - chceme najit ($najit) a cim je nahradit ($nahradit)
$najit = "text-ktery-chceme-nahradit";
$nahradit = "text-kterym-chceme-nahrazovat";

//samotne nahrazeni stringu - retezcu
$loop = mysql_query("
 SELECT
 concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$najit}'', ''{$nahradit}'');') AS s
 FROM
 information_schema.columns
 WHERE
 table_schema = '{$databaze}'")
or die ('Nelze nahradit vyskyty: ' . mysql_error());

while ($query = mysql_fetch_assoc($loop))
{
 mysql_query($query['s']);
}
?>

Ve výše uvedeném skriptu stačí pouze doplnit přihlašovací údaje k databázi ($server, $jmeno, $heslo, $databaze) a změnit odpovídající stringy (řetězce), které chcete napříč celou databází změnit.

Doplňte tedy aktuální řetězec ($najit), který chcete najít a nahradit ho novým řetězcem ($nahradit).

Nakonec skript spusťte. Jen si dejte pozor, zda Vám stačí na Vašem hostingu/serveru dostatečný max_execution_time. Například  Databáze o velikosti 20MB se zpracovávala na poměrně výkonném serveru kolem 5 vteřin.

Jak zabít a ukončit SYSTEM proces ve Windows

Ahoj,

v dnešním článku si ukážeme jednoduchý prográmek, který Vám umožní zabít – killnout jakýkoliv proces, ke kterému nemáte oprávnění a hlásí vám Access denied – přístup odepřen.

Poslouží nám k tomu jednoduchá aplikace, kterou si můžete pod jménem Process Hacker zdarma stáhnout.

process-hacker

Vyhledání procesu, který brání uložení/smazání souboru

Zabití procesu/jeho změna

process-hacker3

 

A umí i další funkce

process-hacker4

 

Dnešní článek je poměrně strohý, ale nemám k němu co více psát. Jeho funkčnost a ovládání je velice jednoduché. 🙂

 

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. 🙂

Nastavení maximální doby běhu PHP skriptu – max_execution_time

Pakliže chcete omezit dobu běhu jednoho daného skriptu a nechcete nastavovat dobu běh všech skriptů na servru centrálně v konfiguračním souboru php.ini, můžete využít jednoduché řešení.

Pokud máte možnost na serveru upravovat PHP konfiguraci, jednoduše vložte do svého skriptu, kterému chcete omezit maximální dobu běhu následující řádek kódu – nejlépe na začátek souboru po <?php.

ini_set('max_execution_time', 30);

Tímto vlastně nemusíte zasahovat do souboru php.ini, ale lze jednoduše upravit max_execution_time přímo v daném souboru.

  • ini_set – udáváme informace, že chceme definovat nějaký „příkaz“ jakoby byl v souboru php.ini
  • max_execution_time – maximální doba běhu skriptu – definice doby v php.ini
  • 30 – doba po které se skript ukončí 

Můžete také využít jednodušší možnosti a to

set_time_limit(30);

A výsledek je zcela stejný. 🙂

 

Stackoverflow – How to define max execution time of one PHP script

Vlastní doména lokálního serveru

Pokud máte na svém počítači nainstalovaný lokální webový server a nebaví Vás neustále zadávat do prohlížeče adresy typu http://localhost/projekty/projekt1/soubor.php, existuje možnost, jak si tuto práci ulehčit. Ne, opravdu nemyslím záložky v prohlížeči…

Kapitoly:

Předem chci říct, že na klasickém webhostingu toto nefunguje. Provozovatel Vám totiž většinou nedá k souboru httpd.conf přístup. Ale my chceme mít lokální doménu, takže nebudeme řešit hostingy, ke kterým si již domény většinou kupujeme. Taktéž tento postup funguje pouze na systému Windows (kvůli souboru hosts).

 

Dejme třeba tomu, že namísto již zmíněné adresy chceme do prohlížeče zadat třeba jen projekt.1/soubor.php.

Využijeme k tomu dva soubory – httpd.conf a Windowsácký soubor hosts (bez přípony).

Soubor httpd.conf na serveru

Nejdříve si otevřeme konfigurační soubor našeho Apache serveru – httpd.conf. Většinou bývá ve složce apache, ale u každého balíku instance to může být trochu jinak. Po otevření souboru vložme na konec souboru tyto řádky:

     
  ServerAdmin localhost                      #e-mailova adresa admnistratora 
  DocumentRoot "C:/lokalni/cesta/ke/slozce/ktere/chceme/vytvorit/domenu"     

  ServerName domena.lokalni                  #nazev domeny
  ServerAlias www.domena.lokalni             #pripadna verze s www (cely tento radek muzete smazat)  
  ErrorLog "logs/soubor-error.log"           #soubory s logy
  CustomLog "logs/soubor-access.log" common  #soubory s logy   
  <Directory "C:/lokalni/cesta/ke/slozce/ktere/chceme/vytvorit/domenu">         
    Options -Indexes +FollowSymLinks         
    AllowOverride all
  </Directory>     
   

Jediné, co vlastně v tomto souboru musíme změnit je třetí řádek s DocumentRoot, kde jen dolníte správnou lokální, absolutní cestu ke složce, které chceme vytvořit lokální doménu. To samé ještě upravíte na osmém řádku začínajícím <Directory.

A naposledy ještě upravíte řádky s ServerName a ServerAlias. Tam si zadáte to, co chcete používat jako lokální doménu. ErrorLog a CustomLog není povinný, ale doporučuji jej využívat pro chybové hlášky a logy přístupů.

Soubor hosts ve Windows

Posledním krokem, aby Vám vše fungovalo je nutno si na počítači, na kterém chcete přistupovat přes doménu je upravit soubor hosts.

Najdete ho na tomto umístění C:WindowsSystem32driversetchosts. Tento soubor je již vytvořený a nemá příponu!

Na konec souboru (většinou je prázdný) vložte:

domena.lokalni 127.0.0.11
www.domena.lokalni 127.0.0.1

Což nám zajistí, že na tomto počítači se nám vlastně nastaví DNS záznamy pro tuto doménu na náš lokální server (127.0.0.1). A tam už si to dokáže poskládat sám soubor httpd.conf.

 

Máte-li dotaz, přispějte do komenářů 🙂

 

Webový server na Debianu 2. díl – FTP server

Instalace

Pro instalaci FTP serveru se připojíme k terminálu (třeba pomocí SSH) a zadáme tento příkaz:

sudo aptitude install vsftpd

Po instalaci je třeba FTP řádně nakonfigurovat, použijeme tento příkaz:

sudo nano /etc/vsftpd.conf

Tímto příkazem otevřeme konfigurační soubor našeho FTP. Cesta k tomuto souboru se může lišit dle používané distribuce a verze Linuxu. Doporučuji si ji zjistit ve Správci souborů.

V otevřeném souboru vyhledáme tento řádek a změníme na NO:

anonymous_enable=NO

 

Restartování FTP serveru

Nyní jsme zakázali přístup na FTP anonymním uživatelům – těm bez přihlašovacího jména a hesla. Následně FTP proces restartujeme, aby se mohly provést změny.

sudo service vsftpd restart

 

Domovské složky

Po tomto restartu již FTP server funguje. Jako přihlašovací údaje lze použít jakéhokoliv uživatele v systému. Bude mít přístup do rootu serveru. To ale určitě nechceme. Pokud chceme nastavit uživateli jinou domovskou složku a o úroveň výše už nebude moci, provedeme tento příkaz:

usermod -d /var/www user

 

Tvorba nového uživatele

Tímto jsem uživateli user (červeně zvýrazněno) nastavili domovský adresář /var/www. To znamená, že do složky /var, ani do vyššího adresáře se nedostane. To je správně, jinak by totiž měl přístup ke konfiguračním souborům, apod…

Pokud chceme vytvořit nového uživatele:

  • se jménem ahoj
  • s heslem tajneheslo
  • a s domovský adresářem /var/www/slozka

použijeme tento příkaz:

sudo useradd -d /var/www/ ahoj
sudo passwd ahoj tajneheslo
sudo chown ahoj /var/www/slozka

Vytvořili jsme tedy nového uživatele se jménem ahoj, heslem tajneheslo a domovský adresářem /var/www/slozka. Tímto způsobem můžeme klidně vytvořit i více uživatelů.

Pro připojení se k serveru přes FTP použijeme nějakého FTP klienta. Výchozí port pro FTP je 21 a pro SFTP 22. Ukázka připojení k serveru pomocí FTP s uživatelem ahoj příkazem do prohlížeče:

ftp://ahoj:tajneheslo@ipadresa

Webový server na Debianu 1. díl – Apache, PHP a MySQL

Předpoklady pro tento článek:

  • Nainstalovaný server s Debianem
  • Vytvořený alespoň jeden uživatelský účet s root oprávněním
  • Povolený SSH přístup
  • Minimálně lokální IP adresa (lepší je veřejná)

Na server se tedy připojíme pomocí SSH. Slouží k tomu třeba program Putty pro Windows. Poté, co jsme se úspěšně připojili na server zadáme své uživatelské jméno a heslo. 

Instalace Apache2

Základem pro dobrý a funkční server je potřeba webový server. Pro Linux Debian použijeme Apache. Pod Windows jsou známé také ISS. V otevřeném terminálu (nebo SSH) zadáme příkaz

sudo aptitude install apache2

Potvrdíme enterem. Nyní nám na obrazovku naskákají různé řádky, to je správně. Počkáme až se instalace dokončí. Pokud po dokončení instalace zadáme do prohlížeče IP adresu našeho serveru, mělo by na nás vykouknout:

Instalace podpory PHP5

Zadáme další příkaz:

sudo aptitude install libapache2-mod-php5 php5

Tímto jsme nainstalovali podporu PHP ve verzi 5 a na serveru se tedy budou moci zpracovávat PHP skripty.

Instalace databáze MySQL

Příkazem nainstalujeme databázi MySQL nejnovější verze pro PHP5:

sudo aptitude install mysql-server php5-mysql

V dalším článku nainstalujeme FTP server a správce databází phpmyadmin. Těšte se!