Пользовательская страница 404 - PHP
У меня есть пользовательская страница 404, которая отлично работает, за исключением сообщения, которое я хочу отобразить на этой странице.
Я бы хотел, чтобы он указал URL-адрес страницы, который не может быть найден, но вместо этого он отображает URL-адрес страницы 404.
Вот что у меня есть...
You were looking for <?php echo $_SERVER['REQUEST_URI'] ?>.
Файл htaccess содержит строку: ErrorDocument 404 /404/
Ответы
Ответ 1
Вместо этого вам нужно использовать $_SERVER['HTTP_REFERER']
- это адрес, который они запросили в первую очередь.
Это работает только в конкретном случае, описанном в вопросе - где браузер фактически перенаправлен на страницу 404. В этой ситуации $_SERVER['REQUEST_URI']
содержит URI страницы 404, а не первоначально запрошенную страницу, как описано.
Использование Apache ErrorDocument 404 /handle404.php
в конфигурации сайта или .htaccess
означает, что $_SERVER['REQUEST_URI']
будет работать, но более надежным решением является вариант в обновлении ниже.
Обновление:
По-видимому, $_SERVER['REDIRECT_URL']
может быть лучше, если вы немного поразмыслите.
В обоих случаях, как отмечают комментаторы ниже, имейте в виду, что любые заголовки настолько же подвержены вредоносному контенту, что и $_POST
, $_GET
и другие, поэтому обрабатывайте их перед выводом чего-либо.
Обновление 2:
Не видел сообщение из @Janoz ниже - он правильно упоминает REDIRECT_URL
.
Ответ 2
С точки зрения php-страницы, это действительно запрос uri. Отображение страницы ошибки выполняется на веб-сервере. Например, Apache добавит дополнительные серверные переменные. REDIRECT_URL, вероятно, тот, который вы ищете.
Ответ 3
Я не писал эту функцию, но это то, что я использую, чтобы сделать то же самое:
function selfURL() {
$s = empty($_SERVER["HTTPS"]) ? ''
: ($_SERVER["HTTPS"] == "on") ? "s"
: "";
$protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? ""
: (":".$_SERVER["SERVER_PORT"]);
return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
}
function strleft($s1, $s2) {
return substr($s1, 0, strpos($s1, $s2));
}
затем распечатать его:
<?php print(selfURL()); ?>
Ответ 4
Если страница не существует, вы перенаправляете его на страницу 404? Idealy, я бы отобразил 404 непосредственно на странице, которая не была найдена. Таким образом, вам не нужно перенаправлять, и вы можете правильно использовать REQUEST_URI. И код для вашего 404 все равно может быть централизован!
Ответ 5
используйте file_exists, чтобы проверить, существует ли файл, который ищет ваш пользователь, или нет. если он не перенаправляет их на страницу сделанных пользователем ошибок.