Apache переписать для 404: получение запрошенного URL - PullRequest
1 голос
/ 25 мая 2011

На странице ошибок, которую я перенаправляю на любые 404, я хотел бы записать URL-адрес, на который пользователь пытался добраться.

Я пробовал это, но это не работает:

ErrorDocument 404 /error/?url=%{HTTP_REFERRER}

Может кто-нибудь сказать мне, как это сделать?

Ответы [ 3 ]

0 голосов
/ 04 июня 2011

Казалось бы, нет пути.

0 голосов
/ 27 августа 2012

Прямого пути нет. Ни один perfect один. Но есть несколько обходных путей с PHP.

Например, в настоящее время я использую функцию для создания ссылок на каждой странице. Поэтому мне просто нужно добавить file_exists () к основной функции (несколько строк в одной функции).

Это функция, которую я бы использовал для создания URL:

function url ($Value)
  {
  // Do some stuff with the url
  // [Not showed]

  if (!file_exists("/internal/path/".$Value))
    {
    // Call a function to store the error in a database
    error ("404", $Value);

    // One way of handling it. Replace '/' for ' ' and search that string.
    // Example: "path/to/page" would become "path to page".
    $Value=str_replace("/","%20",$Value); 
    return "http://www.example.com/search=".$Value;
    }
  else
    {
    // If the page exists, create the normal link.
    return $FullUrl;
    }
  }

Это мой обычный способ создания URL:

<?php url('path/to/page'); ?>

Я только что подумал об этом методе. Это здорово, так как позволяет вам найти пропущенные страницы, даже если пользователь не нажимает на ссылки. Спасибо, что заставили меня подумать об этом, и теперь я буду использовать это на своей странице (:

Другой «более простой» метод (в случае, если вы не переносите ссылки) заключается в том, что вы сохраняете последние пару страниц, посещенных в $_SESSION['lastpage']; и $_SESSION['lastlastpage'];, если найдено 404, сохраняйте соответствующую страницу, с которой пользователь пытался получить доступ к сломанной странице. Это не идеальное решение, поскольку вам нужно вручную найти неработающую ссылку на предыдущей странице, но, по крайней мере, это дает вам некоторое представление о том, где она находится.

Недостаток: Как видите, оба решения работают ТОЛЬКО с внутренними неработающими ссылками.

0 голосов
/ 25 мая 2011

Попробуйте с %{REQUEST_URI}.Я не уверен, что это сработает в ErrorDocument, поскольку я никогда не проверял его, но стоит попробовать.

ErrorDocument 404 /error/?url=%{REQUEST_URI}
...