404.php темы Wordpress не найдена, сервер отображает стандартную страницу 404 Apache
Если я ввожу несуществующий URL, чтобы вызвать ошибку 404 в моей установке Wordpress, Wordpress не загружает собственный файл 404.php, вместо этого отображается стандартное сообщение об ошибке сервера Apache.
Что не так с моей установкой Wordpress? Нужно ли редактировать конфигурационный файл Apache и перенаправлять на страницу 404.php Wordpress?
ОБНОВЛЕНИЕ:
Мне частично удалось решить проблему - я пропустил директиву FileInfo
в файле /etc/apache2/sites-available/default
. Однако не все запросы обрабатываются корректно.

Всё работает так, как должно, и, возможно, это единственный способ, которым это может работать. Давайте разберёмся.
Без модуля Apache под названием mod_rewrite
(или его аналога в Nginx или IIS) запросы к PHP-страницам должны вести к реальному файлу в файловой системе. Именно это вы видите при запросах вида 192.168.1.8/wordpress/?p=123
. Файл, к которому идёт обращение, — это индексный файл директории — index.php
. Такой запрос эквивалентен 192.168.1.8/wordpress/index.php?p=123
. В вашем случае вы запрашиваете другой файл или директорию, например: 192.168.1.8/wordpress/asdasdasd
, но такого файла или директории в файловой системе не существует.
При правильной настройке mod_rewrite
и .htaccess
все запросы перенаправляются на index.php
. Взгляните на стандартный файл .htaccess
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
Директива RewriteRule
перенаправляет почти все запросы на index.php
. Это позволяет WordPress обрабатывать любой запрос, даже если файл физически не существует в системе.
Если "красивые" постоянные ссылки отключены (то есть выбраны "стандартные" постоянные ссылки), WordPress даже не пытается разобрать запрос, что эквивалентно отсутствию mod_rewrite
или .htaccess
.
И если WordPress не может обработать запрос, он не загружает файл 404.php
из темы. Apache, конечно, понимает, что запрос некорректный, и выдаёт стандартное сообщение об ошибке 404.
Таким образом, без mod_rewrite
, правильно настроенного файла .htaccess
и "красивых" постоянных ссылок вы получаете именно то поведение, которое описали — и это абсолютно ожидаемо.

Я включил mod_rewrite с помощью a2enmode rewrite
и создал файл .htaccess с примером содержимого со страницы Wordpress>Using Permalinks, но это всё равно не работает должным образом. Я заметил, что если запросить server/wordpress/index (без .php), то будет перенаправление на кастомную 404 страницу Wordpress, но не если я запрашиваю что-то бессмысленное.

Кстати, файл .htaccess находится в папке /var/www/wordpress/ — это правильно?

.htaccess
должен находиться в той же директории, что и wp-load.php
, обычно. Похоже, что всё верно.

Что ж, у меня больше нет идей, что может вызывать эту проблему. Полагаю, размещение всех файлов в подкаталоге /var/wwww/ — не лучшая идея для хостинга WordPress. Но всё равно спасибо, я приму ваш ответ как лучший, поскольку вы приложили много усилий, и надеюсь, что будущие пользователи найдут его полезным для решения своей проблемы.

Хмм... что-то странное с вашей настройкой, и я не понимаю, что именно.

Да, что-то подозрительное. Попробую сделать чистую переустановку.

Серверы по умолчанию используют разные корневые директории, но нет причин, по которым WordPress нельзя было бы запустить из поддиректории. Я делаю это постоянно.

"даже запросы к файлам, которых физически нет в системе" - технически, правила только переписывают в этом случае, отсюда и RewriteCond
:)

Я проверил 3 варианта (День и название, Числовой и Название записи), и это, кажется, не даёт эффекта, т.е. я по-прежнему получаю сообщение об ошибке 404 от Apache, а не страницу 404.php. Кстати, я использую тему Twenty Thirteen.
