La página 404.php del tema de Wordpress no se encuentra, el servidor muestra la página 404 predeterminada de Apache
Si escribo algo para provocar un error 404 en mi instalación de WordPress, WordPress no carga su propio archivo 404.php, sino que se muestra el mensaje de error 404 predeterminado del servidor Apache.
¿Qué está mal en mi instalación de WordPress? ¿Necesito editar el archivo de configuración de Apache para redirigir a la página 404.php de WordPress?
ACTUALIZACIÓN:
He logrado solucionarlo parcialmente, me faltaba la directiva FileInfo
en el archivo /etc/apache2/sites-available/default
. Aunque todavía no todas las solicitudes se manejan correctamente.
Las cosas están funcionando como se supone que deben hacerlo, y posiblemente de la única manera en que pueden funcionar. Permíteme explicarlo.
Sin un módulo de Apache llamado mod_rewrite
(o su equivalente en Nginx o IIS), las solicitudes a páginas PHP deben dirigirse a un archivo real en el sistema de archivos. Eso es lo que ves con solicitudes como 192.168.1.8/wordpress/?p=123
. El archivo al que se accede es el archivo "índice" del directorio— index.php
. Esa solicitud es equivalente a 192.168.1.8/wordpress/index.php?p=123
. Lo que estás haciendo es solicitar algún otro archivo o directorio con solicitudes como esta— 192.168.1.8/wordpress/asdasdasd
— y no existe tal archivo o directorio en el sistema de archivos.
Con mod_rewrite
y .htaccess
configurados correctamente, todas las solicitudes se envían a index.php
. Echa un vistazo al archivo .htaccess
predeterminado de 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
Esa RewriteRule
redirige todo (casi todo) a index.php
. Eso permite que WordPress procese cualquier solicitud, incluso solicitudes de archivos que no existen físicamente en el sistema.
Sin los permalinks bonitos habilitados— es decir, con los permalinks "predeterminados" seleccionados— WordPress ni siquiera intentará analizar las solicitudes, lo que equivale a no tener mod_rewrite
o .htaccess
en absoluto.
Y, si WordPress no puede analizar la solicitud, WordPress no puede cargar el 404.php
del tema. Apache, por supuesto, aún sabe que la solicitud es incorrecta y muestra su propio mensaje 404.
Por lo tanto, sin mod_rewrite
, un archivo .htaccess
adecuado y permalinks bonitos, obtienes el comportamiento que describes, que es exactamente cómo se supone que deben funcionar las cosas.

He habilitado mod_rewrite con a2enmode rewrite
y he creado el archivo .htaccess con el contenido de ejemplo de la página Wordpress>Usando Permalinks, pero todavía no funciona correctamente. He notado que si solicito servidor/wordpress/index (sin .php) redirige a la página personalizada 404 de Wordpress, pero no si solicito algo sin sentido.

Por cierto, el archivo .htaccess está en la carpeta /var/www/wordpress/, ¿es correcto?

.htaccess
debería estar en el mismo directorio que wp-load.php
normalmente. Eso parece correcto.

Bueno, me he quedado sin ideas, qué podría estar causando este problema, supongo que tener todos los archivos en el subdirectorio de /var/wwww/ no es una buena idea para alojar Wordpress. Pero gracias de todos modos, aceptaré tu respuesta como la mejor, ya que has puesto mucho esfuerzo en esto y espero que futuros usuarios la encuentren útil para solucionar su problema.

Sí, algo es sospechoso, intentaré una reinstalación limpia.

Los servidores tienen configuraciones predeterminadas diferentes para los directorios raíz, pero no hay razón por la que no puedas ejecutar WordPress desde un subdirectorio. Yo lo hago todo el tiempo.

"incluso solicitudes de archivos que no existen físicamente en el sistema" - técnicamente, las reglas solo reescriben en este caso, de ahí los RewriteCond
:)

He verificado 3 opciones (Día y nombre, Numérico y Nombre de la publicación) y esto no parece tener efecto, es decir, sigo recibiendo el mensaje de error 404 de Apache y no el 404.php. Por cierto, estoy usando el tema Twenty Thirteen.
