404.php темы Wordpress не найдена, сервер отображает стандартную страницу 404 Apache

26 мар. 2014 г., 14:22:20
Просмотры: 13.8K
Голосов: 7

Если я ввожу несуществующий URL, чтобы вызвать ошибку 404 в моей установке Wordpress, Wordpress не загружает собственный файл 404.php, вместо этого отображается стандартное сообщение об ошибке сервера Apache.

Что не так с моей установкой Wordpress? Нужно ли редактировать конфигурационный файл Apache и перенаправлять на страницу 404.php Wordpress?

ОБНОВЛЕНИЕ:

Мне частично удалось решить проблему - я пропустил директиву FileInfo в файле /etc/apache2/sites-available/default. Однако не все запросы обрабатываются корректно.

6
Комментарии

В большинстве случаев WordPress может автоматически выполнить то, что вы просите. Какой адрес рабочей страницы? И какой адрес вы используете, который возвращает ошибку 404? Это мультисайт?

s_ha_dum s_ha_dum
26 мар. 2014 г. 14:47:50

Вы используете красивые постоянные ссылки? И проверяли ли вы, что mod_rewrite включен и в вашем .htaccess прописаны правильные правила?

TheDeadMedic TheDeadMedic
26 мар. 2014 г. 14:49:29

Моя установка находится по адресу 192.168.1.8/wordpress/. Это главная страница моего сайта. Я ввожу что-то вроде 192.168.1.8/wordpress/asdasdasd и затем меня перенаправляет на страницу с ошибкой 404 сервера Apache.

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 14:49:49

У меня выбран стандартный стиль постоянных ссылок, например: http://192.168.1.8/wordpress/?p=123

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 14:50:37

@TheDeadMedic Где мне проверить mod_rewrite и .htaccess?

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 14:52:24

@user261562 : при стандартных постоянных ссылках вам не нужны mod_rewrite или .htaccess, но в этом как раз и проблема. Дайте мне проверить, и я напишу ответ.

s_ha_dum s_ha_dum
26 мар. 2014 г. 14:53:20
Показать остальные 1 комментариев
Все ответы на вопрос 2
9

Всё работает так, как должно, и, возможно, это единственный способ, которым это может работать. Давайте разберёмся.

Без модуля 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 и "красивых" постоянных ссылок вы получаете именно то поведение, которое описали — и это абсолютно ожидаемо.

26 мар. 2014 г. 15:07:40
Комментарии

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

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 15:32:45

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

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 15:40:53

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

s_ha_dum s_ha_dum
26 мар. 2014 г. 15:44:00

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

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 15:57:59

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

s_ha_dum s_ha_dum
26 мар. 2014 г. 15:58:30

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

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 15:59:38

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

s_ha_dum s_ha_dum
26 мар. 2014 г. 16:00:02

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

TheDeadMedic TheDeadMedic
26 мар. 2014 г. 16:00:55

@TheDeadMedic : да, хорошее замечание.

s_ha_dum s_ha_dum
26 мар. 2014 г. 16:05:07
Показать остальные 4 комментариев
2

WordPress будет обрабатывать ошибки 404 только при включённых "ЧПУ" (человеко-понятные URL) — перейдите в Настройки > Постоянные ссылки и выберите любой вариант, кроме стандартного (или используйте собственный).

26 мар. 2014 г. 14:57:56
Комментарии

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

Jaromír the Greenhorn Jaromír the Greenhorn
26 мар. 2014 г. 15:01:01

Посмотрите ответ @s_ha_dum, там всё объяснено гораздо лучше!

TheDeadMedic TheDeadMedic
26 мар. 2014 г. 15:09:05