【问题标题】:catching all invalid URLs捕获所有无效的 URL
【发布时间】:2011-06-11 09:47:28
【问题描述】:

我最近升级了一个网站,几乎所有网址都已更改。我已经重定向了所有这些(或者我希望如此),但其中一些可能已经从我身边溜走了。有没有办法以某种方式捕获所有无效的 URL 并将用户发送到某个页面并以某种方式知道该人来自哪个 URL,以便我可以记录并修复这些?我想我可以以某种方式使用 .htaccess 但不确定如何使用。我正在使用 PHP 非常感谢!

【问题讨论】:

    标签: php url redirect url-rewriting


    【解决方案1】:

    在网络根目录的 .htaccess 中

    ErrorDocument 404 /yourFile.php
    

    【讨论】:

      【解决方案2】:

      您可以使用用 PHP 编写的自定义 ErrorDocument 处理程序来捕获“漏掉”的 URL:

      # .htaccess file
      ErrorDocument 404 /not-found.php
      

      not-found.php:

      switch($_SERVER['REDIRECT_URL']) {
          case '/really_old_page.php':
              header('HTTP/1.1 301 Moved Permanently');
              header('Location: /new-url/...');
          /*  As suggested in the comment, exit here.
              Additional output might not be handled well and
              provokes undefined behavior. */
              exit;
          default:
              header('HTTP/1.1 404 Not Found');
              die('404 - Not Found');
      }
      

      【讨论】:

      • 太棒了,这就是我要找的。我想我可以用 .htaccess 以这种方式捕获除 404 之外的其他错误?谢谢。
      • 如果我使用的是您提到的自定义 404 页面并且我碰巧登陆了默认值:switch case,我想显示一个错误页面(类似于 google.com/sdfsdfsdf/ 但正如我了解页面上我必须做的第一件事是 header('HTTP/1.1 404 Not Found'); 然后 die() 之后就不会显示任何内容。如何显示错误页面 + header() + die() ?谢谢!
      • @Kentor die 实际上只是 exit 的别名。只需将错误页面的内容放在 404 标头之后。但是,如果您担心正确发送 HTTP 404 代码,则不能重定向到另一个页面。重定向将使用 301 或 302 覆盖该代码。
      • 以防万一有人感兴趣,我想补充一点,您应该始终 exit();或者死();在 header("位置:/url/");否则 php 仍将执行重定向之后的任何内容。 @goreSplatter 如果你愿意,你可能想在你的答案中添加它..
      【解决方案3】:

      最简单的方法是在 htaccess 中添加自定义 404 重定向。

      只需添加如下内容:

      ErrorDocument 404 /errors/404.php
      

      到您的应用程序根目录中的 .htaccess(如果需要,创建一个)。并且所有对不存在页面的请求都将重定向到您自己的自定义 404 页面。

      【讨论】:

        猜你喜欢
        • 2013-09-09
        • 2013-12-21
        • 2015-12-09
        • 2013-07-12
        • 2021-01-27
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多