Apache重写为404:获取请求的URL

时间:2011-05-24 22:16:52

标签: apache rewrite

在我为任何404重定向到的错误页面上,我想记录用户试图访问的网址。

我试过这个,但它不起作用:

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

谁能告诉我怎么做?

3 个答案:

答案 0 :(得分:0)

使用%{REQUEST_URI}试用。我不确定这会在ErrorDocument中工作,因为我从未测试过它,但是值得尝试。

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

答案 1 :(得分:0)

没有直接的方法。也不是perfect。但PHP的解决方法很少。

例如,我目前使用一个函数来创建每个页面的链接。所以我只需要将file_exists()添加到main函数中(单个函数中的几行)。

这是我用来创建网址的功能:

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;
    }
  }

这是我创建网址的常规方法:

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

我刚考虑过这种方法。这很棒,因为即使用户没有点击链接,它也可以让你找到丢失的页面。感谢您让我考虑一下,现在我将在我的页面中使用它(:

另一个“更简单”的方法(如果你不包装链接)是你存储在$_SESSION['lastpage'];$_SESSION['lastlastpage'];中访问的最后几页,如果找到404则存储相应的页面用户试图访问损坏的页面。这不是一个完美的解决方案,因为你必须在上一页中手动找到断开的链接,但至少它可以让你知道它在哪里。

缺点:如您所见,两种解决方案仅适用于内部断开的链接。

答案 2 :(得分:-4)

似乎没有办法。