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.

Apropo, fișierul .htaccess se află în folderul /var/www/wordpress/, este corect?

.htaccess
ar trebui să fie în același director cu wp-load.php
de obicei. Pare corect.

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.

Da, ceva este suspect, voi încerca o reinstalare curată.

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.

"chiar și cereri pentru fișiere care nu există fizic pe sistem" - tehnic, regulile doar rescriu în acest caz, de aceea există RewriteCond
-urile :)

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.
