Не удается переопределить 404 на WordPress для подкаталогов

Вопрос или проблема

У меня установлен WordPress в корне (/var/www/html), и у меня есть подсистема в корне /var/www/html/manage. Оба каталога имеют свои собственные файлы .htaccess. Содержимое файла .htaccess следующее.

/var/www/html/.htaccess (корень)

# НАЧАЛО 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>

# КОНЕЦ WordPress

/var/www/html/manage/.htaccess (Подкаталог)

# Начало Manage .htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

ErrorDocument 404 /lost.php

# Конец Manage .htaccess

Я могу переписывать расширение .php файлов php в подсистеме с помощью файла .htaccess, но не могу использовать собственный 404, как определено в файле htaccess в подсистеме. Когда я захожу на www.example.com/manage/laksjdflskjf, отображается 404 WordPress вместо lost.php.

Как я могу сделать так, чтобы подсистема показывала свой 404 вместо 404 WordPress?

Как работает htaccess WordPress: сначала он проверяет, есть ли файл, соответствующий запрашиваемому местоположению, и в этом случае он “выполняется”, в противном случае WordPress обрабатывает URL. В основном, вы даже не “исполняете” htaccess вашей подсистемы, если не обращаетесь к существующему файлу здесь.

Что вам следует сделать, так это добавить в правила htaccess WordPress, которые предотвратят его обработку URL под подсистемой.

WordPress имеет свой собственный 404.php файл в теме.

WordPress автоматически использует эту страницу, если возникает ошибка “Страница не найдена”.

Вам нужно отредактировать этот файл, или, если в вашей теме нет этого файла, вам нужно создать его.

Для получения более подробной информации перейдите по этой ссылке.

Ответ или решение

Ваша проблема с переопределением страницы 404 для подкаталога в WordPress связана с тем, как WordPress обрабатывает запросы и правила в файле .htaccess. Рассмотрим, как можно решить эту задачу, предоставив не только техническое объяснение, но и конкретные шаги.

Проблема

Вы установили WordPress в корневом каталоге (/var/www/html), а также создали подкаталог (/var/www/html/manage), где у вас имеется собственный файл .htaccess. Однако, несмотря на то что в этом подкаталоге вы определили собственную страницу 404 (lost.php), при возникновении ошибки 404 отображается стандартная страница WordPress. Это происходит потому, что WordPress перехватывает все несуществующие URL, включая те, которые находятся в подкаталоге.

Причины

  1. Порядок обработки запросов: Когда запрашивается URL, сначала сервер проверяет, существует ли соответствующий файл или директория. Если они не найдены, управление передается правилам WordPress.

  2. Настройки в .htaccess: Правила в корневом файле .htaccess WordPress по умолчанию перехватывают запросы, не соответствующие существующим файлам или каталогам.

Решение

Для того чтобы настроить так, чтобы подкаталог использовал собственные правила .htaccess, необходимо изменить файл .htaccess в корневом каталоге WordPress.

Шаг 1: Обновите файл .htaccess в корневом каталоге

Добавьте условие, которое исключит все запросы к подкаталогу manage из обработки контроллером WordPress. Ваш файл .htaccess в корне может выглядеть следующим образом:

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Исключаем каталог manage
RewriteRule ^manage/ - [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Здесь строка RewriteRule ^manage/ - [L] сигнализирует серверу Nginx или Apache не обрабатывать дальнейшие правила для всех запросов, начинающихся с manage/, и сразу передавать их в файл .htaccess подкаталога.

Шаг 2: Проверьте файл .htaccess в подкаталоге

Убедитесь, что файл .htaccess в подкаталоге manage настроен корректно. Вот пример того, что должно быть в этом файле:

# Start Manage .htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

ErrorDocument 404 /manage/lost.php

# End Manage .htaccess

Обратите внимание на корректный путь к файлу lost.php. Он должен быть указан относительно корня сервера.

Шаг 3: Проверьте работу

Теперь, когда вы настроили оба файла .htaccess, попробуйте снова обратиться к несуществующему URL в подкаталоге, например: www.example.com/manage/laksjdflskjf. Должна отобразиться ваша индивидуальная страница 404 (lost.php), а не стандартная страница WordPress.

Заключение

Таким образом, при помощи изменения логики обработки запросов в файле .htaccess корневого каталога вы сможете эффективно управлять 404 ошибками в подкаталогах. Убедитесь, что все изменения сохранены, а сервер перезапущен, если это необходимо. Инструкция должна помочь вам достичь желаемого поведения вашего сайта на WordPress.

Оцените материал
Добавить комментарий

Капча загружается...