Моя страница с ошибкой представляет собой файл PHP, полный набор которого
<?php
$path_parts = pathinfo($_SERVER['REQUEST_URI']);
$parts = explode('/', $path_parts['dirname']);
if (in_array("abcde", $parts))
{
header('Location: https://example.com/vwxyz/abcde-error-page.php');
exit();
}
else
{
header('Location: https://example.com/vwxyz/error-404-page.php');
exit();
}
?>
Я хочу, чтобы пользователи, которые переходят по несуществующему URL в каталоге «abcde», видели страницу с конкретной ошибкой, а URL должен быть https://example.com/vwxyz/abcde-error-page.php и код состояния должен быть 302. Это работает просто отлично.
Я хочу, чтобы пользователи, которые переходят на любой другой несуществующий URL-адрес (в каталоге «vwxyz» или где-либо еще на example.com), увидеть https://example.com/vwxyz/error-404-page.php, но для того, чтобы был возвращен код состояния 404, и URL в их браузере должен быть таким, каким они ошибочно набраны. Конечно, это не работает с заголовком (‘Location … и я не могу использовать file_get_contents или включить потому что результат очищает корзину и выходит из системы пользователя (если они вошли в систему).
Я чувствую, что есть более простой способ иметь несколько страниц 404 без редактирования файла .htaccess (хотя аргумент, вероятно, будет сделан, что это действительно более простой способ). И очень важно, чтобы главная страница ошибок велась точно так же, как обычная страница ошибок, но чтобы другая (для каталога «abcde») была перенаправлением, и чтобы эта специальная страница ошибок для каталога «abcde» НЕ находилась в этом каталоге (пользователь перенаправляется из каталога, а затем отображается страница «ошибка», которая НЕ должна возвращать статус 404).
Если я правильно понял вопрос является довольно просто через рут .htaccess
файл.
# enable mod_rewrite and route the request
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^/abcde/?.*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /vwxyz/abcde-error-page.php [R=302,L]
# sets a custom 404 page
ErrorDocument 404 /vwxyz/error-404-page.php
Сначала вам нужно включить движок перезаписи, затем выполнить 3 проверки:
/abcde/
Если все это правда, то вы хотите направить (с 302) в /vwxyz/abcde-error-page.php
Для любой подлинной ошибки 404 вы можете просто использовать значение по умолчанию ErrorDocument 404 ...
синтаксис.
(ОК, это было 6 строк в .htaccess — вдвое сложнее, чем я предполагал)
Других решений пока нет …