Il file 404.php del tema Wordpress non viene trovato, il server utilizza la pagina 404 predefinita di Apache
Se digito qualcosa per provocare un errore 404 sulla mia installazione di Wordpress, Wordpress non carica il proprio file 404.php, ma viene visualizzato il messaggio di errore 404 predefinito del server Apache.
Cosa c'è che non va nella mia installazione di Wordpress? Devo modificare il file di configurazione del server Apache per reindirizzare alla pagina 404.php di Wordpress?
AGGIORNAMENTO:
Sono riuscito parzialmente a risolvere il problema, mi mancava la direttiva FileInfo
nel file /etc/apache2/sites-available/default
. Tuttavia, non tutti gli errori vengono gestiti correttamente.

Le cose funzionano come dovrebbero, e probabilmente nell'unico modo in cui possono funzionare. Lasciami spiegare.
Senza un modulo Apache chiamato mod_rewrite
(o il componente equivalente per Nginx o IIS), le richieste alle pagine PHP devono puntare a un file effettivo nel filesystem. Questo è ciò che vedi con richieste come 192.168.1.8/wordpress/?p=123
. Il file a cui si accede è il file "index" della directory— index.php
. Quella richiesta è equivalente a 192.168.1.8/wordpress/index.php?p=123
. Ciò che stai facendo è richiedere un altro file o directory con richieste come questa— 192.168.1.8/wordpress/asdasdasd
— e nessun file o directory di questo tipo esiste nel filesystem.
Con mod_rewrite
e .htaccess
configurati correttamente, tutte le richieste vengono inviate a index.php
. Dai un'occhiata al file .htaccess
standard di WordPress:
# 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
Quella RewriteRule
indirizza tutto (o quasi tutto) a index.php
. Questo permette a WordPress di elaborare qualsiasi richiesta, anche per file che non esistono fisicamente sul sistema.
Senza i permalink "carini" abilitati— cioè, con i permalink "predefiniti" selezionati— WordPress non tenterà nemmeno di analizzare le richieste, il che equivale a non avere affatto mod_rewrite
o .htaccess
.
E, se WordPress non può analizzare la richiesta, non può caricare il 404.php
del tema. Apache, ovviamente, sa ancora che la richiesta non è valida e mostra il suo messaggio di errore 404.
Quindi, senza mod_rewrite
, un file .htaccess
corretto e i permalink carini, ottieni il comportamento che descrivi, che è esattamente come le cose dovrebbero funzionare.

Ho abilitato mod_rewrite con a2enmode rewrite
e creato il file .htaccess con il contenuto di esempio nella pagina Wordpress>Utilizzo dei permalink, ma ancora non funziona correttamente. Ho notato che se richiedo server/wordpress/index (senza .php) verrà reindirizzato alla pagina personalizzata di Wordpress 404 ma non se richiedo qualcosa di insensato.

A proposito, il file .htaccess si trova nella cartella /var/www/wordpress/, è corretto?

.htaccess
dovrebbe trovarsi nella stessa directory di wp-load.php
di solito. Sembra corretto.

Beh, sono a corto di idee, cosa potrebbe causare questo problema, immagino che avere tutti i file nella sottocartella di /var/wwww/ non sia una buona idea per ospitare Wordpress. Ma grazie comunque, accetterò la tua risposta come la migliore, visto che hai messo tanto impegno in questo e spero che gli utenti futuri la trovino utile per risolvere il loro problema.

Sì, c'è qualcosa di sospetto, proverò una reinstallazione pulita.

I server predefiniti utilizzano directory root diverse, ma non c'è motivo per cui non puoi eseguire WordPress da una sottodirectory. Io lo faccio sempre.

"anche le richieste di file che non esistono fisicamente sul sistema" - tecnicamente, le regole riscrivono solo in questo caso, da qui le RewriteCond
:)

Ho verificato 3 opzioni (Giorno e nome, Numerico e Nome del post) e questo non sembra avere effetto, cioè continuo a ricevere il messaggio di errore 404 di Apache invece del 404.php. Uso il tema Twenty Thirteen, tra l'altro.
