Вопрос или проблема
У меня установлен 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, включая те, которые находятся в подкаталоге.
Причины
-
Порядок обработки запросов: Когда запрашивается URL, сначала сервер проверяет, существует ли соответствующий файл или директория. Если они не найдены, управление передается правилам WordPress.
-
Настройки в .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.