Ak vaše trvalé odkazy WordPress náhle vrátia chyby 404 alebo ak jednoducho skopírujete a vložíte do .htaccess spúšťa chybu 500; problém často pramení z kombinácie nekompatibilných pravidiel Apache, chýbajúcich modulov alebo súboru upraveného na nesprávnom mieste.

WordPress 6.9.4 (apríl 2026) naďalej používa .htaccess Toto je relevantné iba v prípade, že váš server je Apache (alebo LiteSpeed ​​​​v kompatibilnom režime). Na Nginx je tento súbor vo všeobecnosti zbytočný. Podľa mojej skúsenosti sú mnohé „chyby WordPressu“ v skutočnosti porušené pravidlá prepisovania alebo direktíva Apache, ktorú poskytovateľ hostingu nepovoľuje.


Potreba / Problém so serverom

Chcete stránku s WordPressom 6.9.4, ktorá:

  • zobrazuje čisté permalinky (žiadne ?p=123),
  • neprerušujte prístup k /wp-admin,
  • nevracia náhodné chyby 404/403.
  • a zostáva rýchly bez pravidiel „skopírovaný zo starého tutoriálu z roku 2017“.

Nakoniec budete vedieť:

  • identifikovať, v čom WordPress píše .htaccess (a ako ho správne regenerovať),
  • Oddeľte „pravidlá WordPressu“ a „optimalizácie servera“, aby ste predišli konfliktom.
  • otestujte svoje zmeny cez SSH, WP-CLI a curl,
  • Riešenie problémov s chybami 500/403/404 reprodukovateľnou metódou.

Rýchle zhrnutie

  • .htaccess je čítaný Apache pri každej požiadavke (pokiaľ AllowOverride je zakázané). Syntaktická chyba = často 500.
  • WordPress píše svoje pravidlá medzi # BEGIN WordPress et # END WordPressNedávajte tam svoje optimalizácie.
  • Chyby 404 permalink často pochádzajú z mod_rewrite neprítomný alebo z AllowOverride à None.
  • Na Nginxe musíte pravidlá preložiť do nginx.conf (alebo konfigurácia vhost). .htaccess sa neuplatňuje.
  • Pred vykonaním akýchkoľvek zmien: sauvegarde súbor a okamžité testovanie prostredníctvom apachectl -t (ak máš na to ruku).

Predtým, ako začnete (predpoklady)

Realistický prístup a predpoklady pre blogera:

  • FTP / SFTP alebo manažér súbory (na úpravu) .htaccess),
  • SSH (Ideálne) na testovanie Apache/Nginx a čítanie protokolov,
  • WP-CLI (ideálne) na regeneráciu pravidiel, vymazanie vyrovnávacej pamäte, kontrolu adresy URL stránky,
  • Prístup k databáze (phpMyAdmin alebo MySQL CLI), ak potrebujete opraviť siteurl/home po migrácii.

Odporúčané verzie (apríl 2026)

  • WordPress: 6.9.4
  • PHP: 8.1+ (8.2/8.3 často lepšie v závislosti od rozšírení a výkonu)
  • MySQL: 8.0+ alebo MariaDB 10.6+ (v závislosti od poskytovateľa hostingu)
  • Webový server: Apache 2.4+ (alebo LiteSpeed) alebo Nginx 1.20+

Vyžaduje sa záloha (pred akýmkoľvek testovaním)

Vysvetlite si to, prosím, sami: .htaccess sa načítava s každou požiadavkou, takže jediný neplatný riadok môže spôsobiť, že vaša stránka bude nedostupná. Pred vykonaním akýchkoľvek zmien uložte zmeny.

Ak máte SSH, uložte súbor:

# Sauvegarde horodatée du .htaccess à la racine WordPress
cd /chemin/vers/votre/site
cp .htaccess ".htaccess.backup.$(date +%F-%H%M%S)"

Ak máte iba FTP/SFTP: stiahnite si .htaccess lokálne pred úpravou.

Nikdy neupravujte jadro WordPressu

Všetko sa deje v koreňovom adresári WordPressu (.htaccess), v konfigurácii servera (Apache/Nginx vhost) alebo v doplnku. Jadro (priečinok wp-includes, wp-admin) sa nemení.


Krok 1: Pochopte, čo WordPress píše (a prečo to nefunguje)

.htaccess je konfiguračný súbor Apache pre každý adresár. Interpretuje sa iba v prípade, že server povoľuje prepísania prostredníctvom AllowOverrideAk váš poskytovateľ hostingu nainštaloval AllowOverride NoneWordPress vie písať .htaccess... ale Apache to bude ignorovať a vaše permalinky zostanú nefunkčné.

Nájdite blok WordPressu

otvorené .htaccess v koreňovom adresári lokality (na rovnakej úrovni ako wp-config.phpZvyčajne uvidíte:

# Exemple : afficher le .htaccess (si vous avez SSH)
cd /chemin/vers/votre/site
sed -n '1,200p' .htaccess

Čo hľadáte:

  • # BEGIN WordPress
  • # END WordPress

Medzi týmito dvoma riadkami spravuje WordPress pravidlá pre permalink. Mimo týchto riadkov je to vaša zóna (alebo zóna pluginu pre vyrovnávaciu pamäť).

Prečo „nevinné“ pravidlo všetko zničí

Tri príčiny, ktoré často vidím:

  • Neoprávnená smernica niektorí poskytovatelia hostingu zakazujú Options ou RewriteOptions en .htaccess → 500.
  • Chýbajúci modul Apache pravidlá RewriteRule sans mod_rewrite → Trvalé odkazy 404.
  • Poradie pravidiel Presmerovanie (www/non-www, http→https) umiestnené za WordPressom môže vytvárať slučky alebo brániť prístupu k wp-admin.

Apache vs Nginx (bod zlomu)

Pred optimalizáciou .htaccessSkontrolujte svoj webový server. Používanie SSH:

# Détecter le serveur web via les headers HTTP
curl -I https://votre-domaine.tld/ | sed -n '1,20p'

Pozrite sa na čiaru Server:Ak vidíš nginxvaše optimalizácie by mali ísť do nginx.conf (alebo konfiguráciu lokality). Ak vidíte Apache ou LiteSpeed, .htaccess je relevantné.

Oficiálny zdroj na strane WordPressu (prepísaný): Apache a WordPress (developer.wordpress.org).


Krok 2: Obnovte čisté pravidlá (bez magického pluginu)

Keď permalink prestane fungovať po migrácii, zmene domény alebo bezpečnostnom plugine, prvým krokom je regenerácia pravidiel WordPressu.

Metóda „bez SSH“ (rozhranie WordPressu)

Prejdite do Nastavenia → Trvalé odkazy a potom uložte zmeny. Toto prinúti WordPress prepísať blok WordPressu. Je to jednoduché, ale nie vždy možné, ak je administrátorský panel neprístupný.

Metóda WP-CLI (odporúčané, ak máte SSH)

WP-CLI je nástroj príkazového riadka pre WordPress. Cieľom je reconstruire pravidlá a potom si ich zapíšte.

Prejdite do priečinka webovej stránky a potom:

# Vérifier que WP-CLI voit bien l'installation
wp core version

# Régénérer les règles de réécriture (permalinks)
# --hard tente d'écrire dans .htaccess (Apache) ou web.config (IIS)
wp rewrite flush --hard

Si wp rewrite flush --hard odpovedá, že nevie písať .htaccessČasto ide o problém s oprávneniami (pozri nižšie) alebo o poskytovateľa hostingu, ktorý blokuje prepísania.

Skontrolujte povolenia súborov

Na klasickom Apache, .htaccess musí byť čitateľný pre používateľa webového servera. Vo všeobecnosti:

  • súbory: 644
  • súbory: 755

Používanie SSH:

# Voir propriétaire/groupe/permissions
ls -la .htaccess

# Fix "raisonnable" (à adapter selon votre hébergement)
chmod 644 .htaccess

Riziko: Neprechádzajte cez 777 „Aby to fungovalo.“ Videl som stránky napadnuté výlučne preto, že povolenia umožňovali súbory upravovať akýmkoľvek procesom.

Bežný prípad: WordPress v podpriečinku

Ak je WordPress nainštalovaný v /wordpress ale podávané od koreňa prostredníctvom index.php presťahovali ste sa, môžete mať RewriteBase nesprávne. V tomto prípade regenerujte pomocou WP-CLI zo správnej cesty a overte, či .htaccess je skutočne obsluhovaný koreňovým serverom webu.

Oficiálny zdroj WP-CLI: prepísať flush vo wp (developer.wordpress.org).


Krok 3: Optimalizácia súboru .htaccess na strane Apache (cache, kompresia, hlavičky)

Zlaté pravidlo: nemiešajte Pravidlá pre permalink WordPressu a vaše optimalizácie. Nechajte WordPress spravovať svoj blok a pridajte svoje optimalizácie pred alebo po.

Správne povoľte kompresiu (mod_deflate)

Kompresia zmenšuje veľkosť HTML/CSS/JS. Na Apache je to často mod_deflateAk modul nie je prítomný, tieto direktívy môžu spôsobiť chybu 500 v závislosti od hostiteľa.

Pridať toto vonku z bloku WordPressu:

# À coller dans .htaccess (Apache), hors bloc WordPress
# Objectif : compresser HTML/CSS/JS/JSON/SVG quand mod_deflate est disponible
<IfModule mod_deflate.c>
  # Compresser les types courants
  AddOutputFilterByType DEFLATE text/html text/plain text/css
  AddOutputFilterByType DEFLATE application/javascript application/json
  AddOutputFilterByType DEFLATE image/svg+xml

  # Éviter certains bugs de proxies anciens (rare en 2026, mais safe)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

Áno, je to „kód Apache“, nie PHP. Často sa držím týchto minimalistických pravidiel: okrem toho rýchlo narazíte na konflikty s pluginmi na ukladanie do vyrovnávacej pamäte.

Vyrovnávacia pamäť prehliadača (Expires/Cache-Control)

Cieľ: ukladať statické prvky (obrázky, CSS, JS) do vyrovnávacej pamäte bez narušenia vyrovnávacej pamäte HTML stránky (ktorú spravuje vyrovnávacia pamäť servera alebo plugin).

<IfModule mod_expires.c>
  ExpiresActive On

  # Images : 30 jours
  ExpiresByType image/jpeg "access plus 30 days"
  ExpiresByType image/png "access plus 30 days"
  ExpiresByType image/webp "access plus 30 days"
  ExpiresByType image/svg+xml "access plus 30 days"
  ExpiresByType image/gif "access plus 30 days"

  # CSS/JS : 7 jours (souvent suffisant si vous versionnez correctement)
  ExpiresByType text/css "access plus 7 days"
  ExpiresByType application/javascript "access plus 7 days"

  # Polices : 30 jours
  ExpiresByType font/woff2 "access plus 30 days"
</IfModule>

<IfModule mod_headers.c>
  # Empêcher le cache agressif du HTML (géré par cache de page si besoin)
  <FilesMatch ".(html)$">
    Header set Cache-Control "no-cache, must-revalidate"
  </FilesMatch>
</IfModule>

Kompatibilita s nástrojmi na tvorbu stránok: Divi 5, Elementor a Avada generujú veľa zdrojov. Tieto pravidlá pomáhajú, ale ak váš nástroj na tvorbu stránok používa dynamické CSS inline, musíte po vykonaní zmien vymazať vyrovnávaciu pamäť nástroja na tvorbu stránok (inak si môžete myslieť, že nefunguje).

Vynútenie HTTPS a kanonické (www alebo bez www)

Umiestnite presmerovania pred blok WordPressu. Prípadne môžete vytvoriť slučky (najmä ak Cloudflare, proxy alebo vyrovnávač záťaže ukončí SSL).

Jednoduchý prípad: Apache bez proxy (priamy HTTPS)

# Redirection HTTP -> HTTPS (simple, sans reverse proxy)
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Bežný scenár v roku 2026: HTTPS za proxy/CDN (Cloudflare, reverzná proxy)

Ak je SSL pripojenie ukončené proxy serverom, Apache niekedy interne „vidí“ HTTP. Použite hlavičku X-Forwarded-Proto ak to vaša infraštruktúra umožňuje.

# HTTPS derrière reverse proxy : évite les boucles
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ak si nie ste istí, skúste toto:

curl -I http://votre-domaine.tld/ | sed -n '1,20p'
curl -I https://votre-domaine.tld/ | sed -n '1,20p'

Čomu sa v súbore .htaccess zámerne vyhýbam

  • Bezpečnostné „mega úryvky“ nájdené na fórach (často nekompatibilné a niekedy nebezpečné).
  • Zložité pravidlá ukladania HTML do vyrovnávacej pamäte (lepšie vo Varnish/Nginx/LiteSpeed ​​​​Cache).
  • Pravidlá, ktoré blokujú admin-ajax.php alebo API REST Divi/Elementor/Avada na ňom závisia a WordPress 6.9.4 sa vo veľkej miere spolieha na REST API.

Oficiálna referencia (smernice) pre Apache: Apache 2.4 – .htaccess (httpd.apache.org).


Krok 4: Riešenie bežných chýb (403/404/500, slučky, nefunkčná administrácia)

Rýchla diagnostická tabuľka

symptóm Príčina pravdepodobná overenie Riešenie
Trvalé odkazy vracajú chyby 404, domovská stránka je v poriadku mod_rewrite neprítomný alebo AllowOverride invalidný apachectl -M | grep rewrite (ak je to možné) / protokoly Apache aktivovať mod_rewrite + AllowOverride All na vhoste, potom wp rewrite flush --hard
Chyba 500 po úprave Neplatná/zakázaná direktíva alebo porušená syntax Záznamy: error.log apache Obnovte zálohu a potom postupne znova zadajte pravidlá.
Slučka presmerovania Zle spravované pravidlá HTTPS/kanonické pravidlá + proxy/CDN curl -I a skontrolujte Location: reťaz použitie X-Forwarded-Proto alebo správne nakonfigurujte proxy
403 dňa wp-admin Príliš agresívne bezpečnostné pravidlá, WAF (faktor akceptácie manželky), povolenia Záznamy Apache + dočasné vypnutie vlastných pravidiel Odstrániť pravidlo, skontrolovať povolenia, pridať koncové body na bielu listinu
CSS/JS sa už nenačítavajú Zlá kontrola vyrovnávacej pamäte, zlé presmerovanie alebo pravidlo blokovania wp-content Nástroje pre vývojárov / curl -I v súbore CSS Opravte pravidlá, vymažte vyrovnávaciu pamäť pluginov/CDN, skontrolujte typy MIME

Chyba 500: „chirurgická“ metóda

Keď jazdíte na 500-metrovom motocykli, vyhnite sa hádaniu. Postupujte takto:

  • obnoviť zálohu .htaccess aby sa stránka opäť spustila online,
  • Prečítajte si protokol chýb Apache a nájdite chybnú direktívu.
  • Znovu zaveďte pravidlá v blokoch.

Pomocou SSH vyhľadajte protokol (v závislosti od distribúcie/poskytovateľa hostingu):

# Debian/Ubuntu (souvent)
sudo tail -n 200 /var/log/apache2/error.log

# RHEL/CentOS/Alma/Rocky (souvent)
sudo tail -n 200 /var/log/httpd/error_log

Zvyčajne hľadáte:

  • Invalid command 'Header'mod_headers nie je načítané
  • RewriteEngine not allowed hereAllowOverride neumožňuje FileInfo
  • Options FollowSymLinks not allowed here → smernica zakázaná v .htaccess

Trvalé odkazy 404: skontrolujte mod_rewrite a AllowOverride

Ak spravujete server (VPS), otestujte moduly:

# Lister les modules Apache chargés
apachectl -M | sed -n '1,200p'

# Vérifier rewrite
apachectl -M | grep -i rewrite

V systéme Debian/Ubuntu, aktivácia:

# Activer mod_rewrite
sudo a2enmod rewrite

# (Optionnel) headers/expires si vous utilisez les directives correspondantes
sudo a2enmod headers
sudo a2enmod expires

# Tester la config
sudo apachectl -t

# Redémarrer proprement
sudo systemctl reload apache2

Ďalej musíte v konfigurácii virtuálneho hostiteľa Apache povoliť prepísania. Príklad (upraví sa):

<Directory /var/www/votre-site>
  AllowOverride All
  Require all granted
</Directory>

Bez tohto môže mať WordPress 6.9.4 .htaccess Perfektné… a Apache to bude ignorovať.

Administrácia po migrácii nefunguje: skontrolujte domovskú stránku/URL stránky

Un .htaccess „correct“ nezabráni slučke, ak si WordPress myslí, že je na inej doméne. Skontrolujte to cez WP-CLI:

# Lire les URLs configurées
wp option get home
wp option get siteurl

Ak je to zlé:

# Remplacer proprement (attention : utilisez la bonne URL)
wp option update home "https://votre-domaine.tld"
wp option update siteurl "https://votre-domaine.tld"

Oficiálny zdroj (možnosti): get_option (developer.wordpress.org).


Kompletné konfiguračné súbory

Nižšie nájdete súbory pripravené na kopírovanie a vkladanie. Upravte cesty a domény. A nezabudnite: ak používate Nginx, .htaccess sa neuplatňuje.

Kompletný súbor .htaccess (Apache): WordPress + rozumné optimalizácie

Vložte tento súbor do koreňového adresára WordPressu. Ak doplnok na ukladanie do vyrovnávacej pamäte (LiteSpeed ​​​​Cache, WP Rocket atď.) zapisuje vlastné bloky, ponechajte si ich, ale vyhnite sa duplicitným presmerovaniam.

# =====================================================================
# .htaccess (Apache) - WordPress 6.9.4+ (avril 2026)
# Objectif : permaliens + quelques optimisations sûres
# Note : si votre hébergeur interdit certaines directives, vous aurez une 500.
# =====================================================================

# --- Sécurité minimale : empêcher l’indexation de répertoires (si autorisé) ---
Options -Indexes

# --- Redirection HTTP -> HTTPS (cas simple, sans reverse proxy) ---
# Si vous êtes derrière Cloudflare/reverse proxy, commentez ce bloc
# et utilisez le bloc X-Forwarded-Proto plus bas.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# --- Variante reverse proxy (décommentez si nécessaire) ---
#RewriteEngine On
#RewriteCond %{HTTP:X-Forwarded-Proto} !https
#RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# --- Compression (si mod_deflate est dispo) ---
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css
  AddOutputFilterByType DEFLATE application/javascript application/json
  AddOutputFilterByType DEFLATE image/svg+xml

  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch bMSIE !no-gzip !gzip-only-text/html

  <IfModule mod_headers.c>
    Header append Vary User-Agent
  </IfModule>
</IfModule>

# --- Cache navigateur pour assets (si mod_expires dispo) ---
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpeg "access plus 30 days"
  ExpiresByType image/png "access plus 30 days"
  ExpiresByType image/webp "access plus 30 days"
  ExpiresByType image/svg+xml "access plus 30 days"
  ExpiresByType image/gif "access plus 30 days"
  ExpiresByType text/css "access plus 7 days"
  ExpiresByType application/javascript "access plus 7 days"
  ExpiresByType font/woff2 "access plus 30 days"
</IfModule>

# --- WordPress : ne modifiez pas ce bloc à la main ---
# Si vous devez le reconstruire : Réglages > Permaliens ou wp rewrite flush --hard
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Minimálny ekvivalent súboru nginx.conf (blok servera) pre WordPress

Ak používate Nginx, tu je základné nastavenie. Spracováva permalinks WordPressu bez... .htaccessNa zdieľanom serveri Nginx nebudete mať k tejto konfigurácii vždy prístup.

# =====================================================================
# Nginx - configuration minimale WordPress (permalinks)
# À placer dans le server{} de votre vhost
# =====================================================================

server {
  listen 80;
  server_name votre-domaine.tld www.votre-domaine.tld;

  # Redirection HTTP -> HTTPS (si vous avez un vhost SSL séparé)
  return 301 https://votre-domaine.tld$request_uri;
}

server {
  listen 443 ssl http2;
  server_name votre-domaine.tld;

  root /var/www/votre-site;
  index index.php index.html;

  # Empêcher l’accès à certains fichiers sensibles
  location ~* /(wp-config.php|readme.html|license.txt) {
    deny all;
  }

  # Permaliens WordPress
  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  # PHP-FPM (exemple)
  location ~ .php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Adaptez la version/chemin
  }

  # Cache statique (simple)
  location ~* .(css|js|jpg|jpeg|png|webp|gif|svg|woff2)$ {
    expires 7d;
    add_header Cache-Control "public, max-age=604800";
    try_files $uri =404;
  }
}

wp-config.php: užitočné nastavenia pre riešenie problémov (bez prerušenia produkcie)

Nebudete „optimalizovať“ Apache prostredníctvom wp-config.php, ale môžete povoliť protokolovanie na diagnostiku vedľajšieho účinku po obrazovke 500/bielej obrazovke.

Dočasne pridať (potom odstrániť):

<?php
// wp-config.php (extraits) - WordPress 6.9.4+ / PHP 8.1+
// Objectif : activer un logging propre en dépannage (à désactiver après)

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );      // Écrit dans wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // Évite d’afficher des infos sensibles aux visiteurs

// Optionnel : augmenter la mémoire si vous avez des erreurs liées à Elementor/Divi/Avada
define( 'WP_MEMORY_LIMIT', '256M' );

Oficiálny zdroj: Ladenie WordPressu (developer.wordpress.org).

php.ini (alebo PHP conf): parametre, ktoré zabraňujú falošným diagnózam

Un .htaccess „Perfektné“ nezabráni neúspešnému nahrávaniu ani uplynutiu časového limitu nástroja na tvorbu stránok. Tu je rozumný východiskový bod pre blog s nástrojom na tvorbu stránok (prispôsobte ho svojmu poskytovateľovi hostingu).

; php.ini (extraits) - PHP 8.1+
memory_limit = 256M
max_execution_time = 120
max_input_time = 120
post_max_size = 64M
upload_max_filesize = 64M
max_input_vars = 5000

; Logging (en prod, évitez display_errors)
display_errors = Off
log_errors = On

Referencia PHP: Direktívy PHP (php.net).


overenie

Po úprave .htaccess (alebo Nginx conf), overte si to pomocou testov, ktoré nezávisia od vášho prehliadača (cache, rozšírenia atď.).

1) Otestujte syntax servera

Na Apache (ak máte prístup):

# Vérifier la configuration Apache (inclut parfois les .htaccess selon setup)
sudo apachectl -t

Na Nginxe:

# Tester la configuration Nginx
sudo nginx -t

2) Otestujte presmerovania

Cieľ: overiť, či máme 301 na HTTPS bez slučky.

curl -I http://votre-domaine.tld/ | sed -n '1,20p'

3) Otestujte permalink a statický zdroj

# Un article (doit répondre 200, pas 404)
curl -I "https://votre-domaine.tld/mon-article/" | sed -n '1,20p'

# Un fichier CSS (doit répondre 200 et idéalement Cache-Control/Expires)
curl -I "https://votre-domaine.tld/wp-content/themes/votre-theme/style.css" | sed -n '1,30p'

4) Skontrolujte stranu rozhrania príkazového riadka WordPressu

Cieľ: zabezpečiť konzistenciu WordPressu (URL, pravidlá, stav).

wp core version
wp option get home
wp option get siteurl
wp rewrite list --format=table | sed -n '1,40p'

Ak používate vyrovnávaciu pamäť servera (vyrovnávacia pamäť LiteSpeed/Varnish/NGINX), po vykonaní zmien ju vymažte. V opačnom prípade budete testovať starú verziu a strácať čas.


Ak to nefunguje

Keď webová stránka prestane reagovať po úprave, vašou prioritou je obnoviť prístupa potom diagnostikovať.

Krok A: Odošlite minimálny súbor .htaccess na obnovenie stránky

Premenujte aktuálny súbor (aby ste ho zachovali) a potom vytvorte .htaccess minimálny iba s blokom WordPress.

cd /chemin/vers/votre/site
mv .htaccess .htaccess.ko

# Créer un .htaccess minimal
cat > .htaccess <<'EOF'
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
EOF

Ďalej regenerujte:

wp rewrite flush --hard

Krok B: Prečítajte si protokoly na správnom mieste

Užitočné chyby nie sú vo WordPresse, ale vo webovom serveri.

  • Apache: /var/log/apache2/error.log ou /var/log/httpd/error_log
  • Nginx: /var/log/nginx/error.log
  • PHP-FPM: v závislosti od verzie a distribúcie (napr.: /var/log/php8.2-fpm.log)
# Apache
sudo tail -n 200 /var/log/apache2/error.log

# Nginx
sudo tail -n 200 /var/log/nginx/error.log

Krok C: Overte, či je súbor .htaccess správne použitý

Typický príznak: upravíte .htaccessŽiadny účinok. Prevládajú dve príčiny:

  • Nepoužívate Apache/LiteSpeed.
  • AllowOverride je na None.

Ak spravujete Apache, vyhľadajte vhost a potom:

# Chercher AllowOverride dans les fichiers de conf (chemins variables)
sudo grep -R "AllowOverride" -n /etc/apache2/sites-enabled /etc/apache2/apache2.conf 2>/dev/null | sed -n '1,120p'

Krok D: Izolácia konfliktu vyrovnávacej pamäte/pluginu

Často som sa stretol s konfliktmi medzi pravidlami .htaccess a pluginy pre ukladanie do vyrovnávacej pamäte/zabezpečenie, ktoré vkladajú vlastné direktívy. Na izoláciu:

  • Dočasne vypnite doplnok vyrovnávacej pamäte cez WP-CLI.
  • Vymažte vyrovnávaciu pamäť CDN, ak ju máte.
  • odstrániť bloky, ktoré nepatria do WordPressu, z .htaccess a potom ich znova zaviesť.
# Désactiver un plugin de cache (exemples, adaptez le slug)
wp plugin deactivate litespeed-cache
wp plugin deactivate wp-rocket

Zdroj WP-CLI (pluginy): deaktivácia pluginu wp (developer.wordpress.org).


Časté úskalia a chyby

Chyba Spôsobiť Riešenie
Kopírovanie kódu na nesprávne miesto Zaviedol si nejaké pravidlá wp-admin/.htaccess alebo v podpriečinku Le .htaccess Hlavný adresár musí byť v koreňovom adresári webu (vedľa wp-config.php)
Chyba 500 po kopírovaní a vkladaní Zakázaná direktíva Apache (napr.: Options) alebo chýbajúci modul (napr. mod_headers) Lit error.log, obklopiť s <IfModule>alebo presuňte direktívu do vhost
Trvalé odkazy sa neobnovujú Zmenil si štruktúru, ale nezrušil si pravidlá. Nastavenia → Trvalé odkazy → Uložiť alebo wp rewrite flush --hard
Slučka presmerovania po prepnutí na HTTPS Proxy/CDN ukončuje SSL pripojenie; Apache sa domnieva, že používa HTTP. použitie X-Forwarded-Proto alebo nakonfigurujte proxy; overte si to u curl -I
CSS/JS „nefunkčné“ po optimalizácii Príliš agresívna vyrovnávacia pamäť prehliadača + nevymazali ste vyrovnávaciu pamäť nástroja na tvorbu stránok Vyčistiť vyrovnávaciu pamäť Divi/Elementor/Avada + vyrovnávaciu pamäť pluginov/CDN; skontrolovať hlavičky v súbore
Úryvok zo starého, nekompatibilného tutoriálu Zastarané pravidlá (napr. direktívy Apache 2.2, staré hacky) Počnúc .htaccess Minimálne WP 6.9.4, potom pridajte moderné a testované bloky
Testovanie v produkčnom prostredí bez zálohovania Jeden neplatný znak spôsobí, že stránka bude nepoužiteľná. Záloha + rýchle vrátenie zmien (premenovanie/obnovenie) + testovanie cez apachectl -t

Zabezpečenie servera

.htaccess Môže to zvýšiť bezpečnosť, ale môže to byť aj nevýhoda (blokovanie REST API atď.). admin-ajax.php(od staviteľa). Držte sa jednoduchých a overiteľných pravidiel.

Blokovať prístup k citlivým súborom

Pridať (Apache):

# Bloquer des fichiers qui n’ont rien à faire en public
<FilesMatch "^(wp-config.php|readme.html|license.txt)$">
  Require all denied
</FilesMatch>

Zabrániť vykonávaniu PHP kódu pri nahrávaní (znižuje dopad škodlivého nahrávania)

Vytvorte a .htaccess v wp-content/uploads/ (nie pri koreni):

# wp-content/uploads/.htaccess
# Objectif : empêcher l’exécution de scripts PHP dans le dossier d’uploads
<FilesMatch ".php$">
  Require all denied
</FilesMatch>

Riziko: Ak plugin zámerne ukladá súbory PHP do nahrávaných súborov (zlý postup, ale stáva sa to), plugin to poškodí. Najprv to otestujte v testovacom prostredí.

Povolenia: zostať prísne

  • Nikdy nedávajte wp-config.php v globálnom písaní.
  • Vyhnite sa „otvoreným“ povoleniam (777).
  • Ak si nie ste istí, skontrolujte vlastníka/skupinu a zhodnite sa s používateľom webového servera.

Referencia WordPressu (vylepšenie): Spevnenie WordPressu (wordpress.org).


zdroje


Často kladené otázky

Kde sa nachádza súbor .htaccess pre WordPress?

V koreňovom adresári WordPress stránky, na rovnakej úrovni ako wp-config.php et wp-contentMôže byť skrytý (súbor začínajúci bodkou). Na niektorých hostingových službách neexistuje, kým nepovolíte trvalé odkazy.

Nemám súbor .htaccess, je to problém?

Nie. Ak používate Nginx, je to normálne. Ak používate Apache a používate „pekné“ permalinky, WordPress môže jeden vytvoriť, keď ho uložíte cez Nastavenia → Permalinks.

Prečo moje trvalé odkazy vracajú chybu 404, keď domovská stránka funguje?

Klasický prípad: mod_rewrite nie je aktivovaný alebo AllowOverride zakázané. WordPress generuje URL adresy, ale Apache ich neprepisuje. index.php.

Môžem „zrýchliť WordPress“ len pomocou .htaccess?

Môžete vylepšiť kompresiu a ukladanie statických súborov do vyrovnávacej pamäte. Pre ukladanie HTML do vyrovnávacej pamäte (stránky) je vhodnejšie použiť vyrovnávaciu pamäť servera (Nginx microcache, Varnish, LiteSpeed) alebo plugin na ukladanie do vyrovnávacej pamäte. .htaccess Samotná tá nenahrádza skutočnú vyrovnávaciu pamäť stránok.

Je kompatibilný s Divi 5, Elementor a Avada?

Áno, ak sa vyhnete blokovaniu REST API a admin-ajax.phpa ak nezavediete agresívne pravidlá proti hotlinkom wp-contentPo zmene vyrovnávacej pamäte hlavičiek vymažte vyrovnávaciu pamäť nástroja na tvorbu a vyrovnávaciu pamäť CDN.

Hneď ako pridám blok „Header set…“, zobrazí sa mi chyba 500.

Veľmi často, mod_headers nie je načítaný. Skontrolujte protokol Apache: uvidíte Invalid command 'Header'Riešenie: aktivovať headers (VPS) alebo odstráňte tento blok (zdieľaný).

Prečo WordPress prepisuje môj súbor .htaccess a maže moje pravidlá?

WordPress zvyčajne upravuje iba blok medzi # BEGIN WordPress et # END WordPressAk ste tam boli vložili svoje pravidlá, mohli by byť prepísané počas vymazania permalinku.

Môžem do súboru .htaccess zaviesť veľmi prísne bezpečnostné pravidlá?

Môžete, ale otestujte to v testovacom prostredí. Videl som pravidlá „anti-API“, ktoré blokujú Gutenberg, editor stránok, Elementor a dokonca aj platby. WooCommerceUprednostňujte cielené pravidlá (citlivé súbory, PHP pri nahrávaní).

Ako sa môžem vrátiť do predchádzajúceho stavu, ak už nemám administrátorský prístup?

Obnoviť zálohu .htaccess cez FTP/SFTP alebo premenujte súbor a nahrajte ho .htaccess minimálne. Potom regenerujte s wp rewrite flush --hard ak máš WP-CLI.

Číta sa súbor .htaccess pri každej požiadavke?

Áno, na Apache je to reálna cena. To je jeden z dôvodov, prečo je náročné optimalizácie a pokročilé ukladanie do vyrovnávacej pamäte často lepšie implementovať na úrovni virtuálneho hostiteľa Apache alebo priamo na Nginx.