404.php din tema WordPress nu este găsit, serverul folosește pagina de eroare implicită a Apache
Dacă introduc ceva pentru a provoca o eroare 404 în instalarea mea WordPress, WordPress nu încarcă propriul fișier 404.php, ci se afișează mesajul de eroare implicit al serverului Apache.
Ce este în neregulă cu instalarea mea WordPress? Trebuie să modific fișierul de configurare al serverului Apache pentru a redirecționa către pagina 404.php din WordPress?
ACTUALIZARE:
Am reușit parțial să rezolv problema, am uitat să adaug directiva FileInfo în fișierul /etc/apache2/sites-available/default. Însă, nu toate solicitările sunt tratate corespunzător.
Lucrurile funcționează așa cum ar trebui, și probabil singurul mod în care pot funcționa. Permiteți-mi să explic.
Fără un modul Apache numit mod_rewrite (sau componenta echivalentă în Nginx sau IIS), cererile către paginile PHP trebuie să meargă către un fișier real din sistemul de fișiere. Aceasta este ceea ce vedeți cu cereri precum 192.168.1.8/wordpress/?p=123. Fișierul accesat este fișierul "index" al directorului -- index.php. Acea cerere este echivalentul lui 192.168.1.8/wordpress/index.php?p=123. Ceea ce faceți este să solicitați un alt fișier/director cu cereri precum aceasta -- 192.168.1.8/wordpress/asdasdasd -- și niciun astfel de fișier sau director nu există în sistemul de fișiere.
Cu mod_rewrite și .htaccess configurate corect, toate cererile sunt trimise către index.php. Uitați-vă la fișierul standard WordPress .htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Acea RewriteRule direcționează totul (aproape totul) către index.php. Asta permite WordPress să proceseze orice cerere, chiar și cereri pentru fișiere care nu există fizic pe sistem.
Fără permalink-uri frumoase activate -- adică, cu permalink-urile "implicite" selectate -- WordPress nici măcar nu va încerca să analizeze cererile, ceea ce este echivalent cu a nu avea deloc mod_rewrite sau .htaccess.
Și, dacă WordPress nu poate analiza cererea, WordPress nu poate încărca 404.php-ul temei. Desigur, Apache încă știe că cererea este incorectă și încarcă propriul mesaj de eroare 404.
Deci, fără mod_rewrite, un fișier .htaccess corect și permalink-uri frumoase, obțineți comportamentul pe care îl descrieți, care este exact modul în care lucrurile ar trebui să funcționeze.
Am activat mod_rewrite cu a2enmode rewrite și am creat fișierul .htaccess cu conținutul exemplu de pe pagina Wordpress>Using Permalinks, dar încă nu funcționează corect. Am observat că dacă solicit server/wordpress/index (fără .php) va redirecționa către pagina personalizată 404 Wordpress, dar nu dacă solicit ceva fără sens.
Jaromír the Greenhorn
Apropo, fișierul .htaccess se află în folderul /var/www/wordpress/, este corect?
Jaromír the Greenhorn
.htaccess ar trebui să fie în același director cu wp-load.php de obicei. Pare corect.
s_ha_dum
Ei bine, am rămas fără idei, ce ar putea fi problema, cred că a avea toate fișierele într-un subdirector al /var/www/ nu este o idee bună pentru a găzdui WordPress. Dar oricum mulțumesc, voi accepta răspunsul tău ca fiind cel mai bun, deoarece ai depus mult efort în acest sens și sper că viitorii utilizatori îl vor găsi util pentru a-și rezolva problema.
Jaromír the Greenhorn
Da, ceva este suspect, voi încerca o reinstalare curată.
Jaromír the Greenhorn
Serverele au implicit directoare rădăcină diferite, dar nu ar trebui să existe niciun motiv pentru care nu poți rula WordPress dintr-un subdirector. Eu fac asta tot timpul.
s_ha_dum
"chiar și cereri pentru fișiere care nu există fizic pe sistem" - tehnic, regulile doar rescriu în acest caz, de aceea există RewriteCond-urile :)
TheDeadMedic
Am verificat 3 opțiuni (Zi și nume, Numeric și Nume post) și nu pare să aibă niciun efect, adică tot primesc mesajul de eroare 404 Apache și nu 404.php. Folosesc tema Twenty Thirteen, apropo.
Jaromír the Greenhorn