Избегайте перенаправления 302 при настройке нескольких страниц 404

Моя страница с ошибкой представляет собой файл 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).

1

Решение

Если я правильно понял вопрос является довольно просто через рут .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 проверки:

  1. URL начинается с /abcde/
  2. URL не файл
  3. URL не каталог

Если все это правда, то вы хотите направить (с 302) в /vwxyz/abcde-error-page.php

Для любой подлинной ошибки 404 вы можете просто использовать значение по умолчанию ErrorDocument 404 ... синтаксис.

(ОК, это было 6 строк в .htaccess — вдвое сложнее, чем я предполагал)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]