Příručka .htaccess pro Apache 2.4

Praktická česká příručka pro Raspberry Pi OS, PHP aplikace, SQLite a administraci webu.

Edice 2026

1. Co je .htaccess

.htaccess je adresářový konfigurační soubor Apache. Pravidla platí pro adresář, ve kterém leží, a obvykle i pro podadresáře.

Doporučení: Máte-li přístup k hlavní konfiguraci Apache, je rychlejší zapisovat pravidla do bloku <Directory>.

2. Povolení AllowOverride

<Directory /var/www/html>
    AllowOverride FileInfo AuthConfig Limit Indexes
    Require all granted
</Directory>

AllowOverride None soubory .htaccess vypne. Po změně spusťte:

sudo apachectl configtest
sudo systemctl reload apache2

3. Moduly na Raspberry Pi OS

sudo a2enmod rewrite headers expires deflate
sudo systemctl restart apache2
apache2ctl -M | grep -E 'rewrite|headers|expires|deflate'

Neznámá direktiva nebo chybějící modul často způsobí HTTP 500. Kontrolujte /var/log/apache2/error.log.

4. Základní direktivy

# Komentář
DirectoryIndex index.php index.html
Options -Indexes
AddDefaultCharset UTF-8

Options -Indexes zakáže výpis obsahu adresáře.

5. mod_rewrite a RewriteRule

RewriteEngine On
RewriteRule ^produkt/([0-9]+)/?$ produkt.php?id=$1 [L,QSA]

V .htaccess se cesta zpravidla porovnává bez počátečního lomítka. $1 je první zachycená skupina.

6. RewriteCond

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [END,QSA]

Podmínky znamenají, že cílem není existující soubor ani adresář.

7. Proměnné a přepínače

PrvekVýznam
%{HTTP_HOST}doména
%{REQUEST_URI}URL cesta
%{HTTPS}on/off
Lposlední pravidlo průchodu
ENDukončí per-directory přepisování
R=301trvalé přesměrování
QSAponechá query string
F403 Forbidden

8. HTTPS a doména

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

Nová pravidla nejprve zkoušejte s R=302.

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

9. SEO URL a front controller

RewriteRule ^produkt/([a-z0-9-]+)/?$ product.php?slug=$1 [END,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [END,QSA]

10. Ochrana SQLite a citlivých souborů

<FilesMatch "(?i)\.(sqlite|sqlite3|db|sql|bak|ini|log)$">
    Require all denied
</FilesMatch>
Důležité: SQLite databázi ukládejte mimo veřejný DocumentRoot.

11. Bezpečné uploady

Do složky uploads vložte samostatný .htaccess:

Options -Indexes

<FilesMatch "(?i)\.(php|phtml|phar|php[0-9])$">
    Require all denied
</FilesMatch>

12. Řízení přístupu a heslo

Require ip 127.0.0.1 ::1 192.168.1.0/24
sudo htpasswd -c /etc/apache2/.htpasswd admin
AuthType Basic
AuthName "Administrace"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

13. Bezpečnostní hlavičky

<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

14. Cache a komprese

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 7 days"
    ExpiresByType image/webp "access plus 30 days"
</IfModule>
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/css
    AddOutputFilterByType DEFLATE application/javascript application/json
</IfModule>

15. Kompletní základ pro PHP e-shop

Options -Indexes
DirectoryIndex index.php
AddDefaultCharset UTF-8

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [END]

    RewriteRule ^produkt/([a-z0-9-]+)/?$ product.php?slug=$1 [END,QSA,NC]
    RewriteRule ^ index.php [END,QSA]
</IfModule>

<FilesMatch "(?i)\.(sqlite|sqlite3|db|sql|bak|ini|log)$">
    Require all denied
</FilesMatch>

16. Ladění chyb

sudo apachectl configtest
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/access.log
ProjevPříčina
HTTP 500syntaktická chyba nebo chybějící modul
HTTP 404mod_rewrite není aktivní nebo vzor nesedí
Smyčkapodmínka nerozpozná cílový stav

17. Checklist