【问题标题】:Redirect a 404 to another page and capturing the page with .htaccess将 404 重定向到另一个页面并使用 .htaccess 捕获该页面
【发布时间】:2018-10-12 18:37:32
【问题描述】:

好的,我想要做的是创建一个 .htaccess,它将任何 404 错误重定向到另一个页面,同时捕获试图访问的路径/文件。

所以,如果他们试图访问

www.mydomain.com/xxx 

我希望它被重定向到

www.mydomain.com/error.php?e=xxx.  

我从来都不擅长编写 .htaccess 文件,所以有人能提供的任何帮助都会很棒。

我需要它在整个站点范围内工作。先感谢您!

【问题讨论】:

    标签: apache .htaccess web url-rewriting


    【解决方案1】:

    您不需要 RewriteRule 来实现这一点。 只需使用ErrorDocument 指令即可。

    它将提供您引用的页面,但不会重定向到它。 如果您的 ErrorDocument 页面是 php 脚本,则您可以访问 $_SERVER['REQUEST_URI'] 以了解未找到的资源是什么。

    所以,基本上,你只需要在你的 .htaccess 文件中使用这个:

    ErrorDocument 404 /error.php
    

    error.php:

    $notFound = $_SERVER['REQUEST_URI'];
    

    或者你想在其中存储该 URI 的任何变量。

    好处是,由于用户没有被重定向到页面,一个简单的错字很容易纠正到正确的页面,而重定向会迫使用户再次输入整个 URL(另外,他/她将无法看到他/她试图访问的内容)。

    从分析的角度来看,它仍然是没有任何额外代码的 404。 重定向到错误页面会强制您向其添加额外的 404 标头(因此机器人不会索引您的错误页面等)。

    error.php 中,确保您的所有资产路径都是绝对的,因为它可能从http://www.example.com/xxx/yyy 传递,并且会从/xxx/ 中查找相对资产(此路径可能不存在)。因此,即使 error.php 位于您的根文件夹中,只要 404 在其 URI 中有文件夹,使用 src="img/404.png" 也将不起作用。你必须使用src="/img/404.png"

    【讨论】:

      【解决方案2】:

      您可以在站点根目录 .htaccess 中使用此规则:

      RewriteEngine On
      
      # If the request is not for a valid directory
      RewriteCond %{REQUEST_FILENAME} !-d
      # If the request is not for a valid file
      RewriteCond %{REQUEST_FILENAME} !-f
      # rewrite to error.php with a query parameter
      RewriteRule .+ error.php?e=$0 [L,QSA]
      

      【讨论】:

      • 要模拟 ErrorDocument 开箱即用的功能有很多代码 :-)
      • 你真的相信我不知道ErrorDocument吗? :) 我不使用 ErrorDocument 的原因是因为 OP 想要 GET 参数中的 404 URI。
      • OP 在哪里说他想要在 GET 参数中?简介告诉“捕获试图访问的路径/文件”。是的,他确实尝试使用 GET 来捕获它,但这并不意味着应该鼓励使用非常复杂的解决方案。
      • 请再读一遍:I want it to be redirected to www.mydomain.com/error.php?e=xxx.
      • 我的意思是,跳出框框思考并教 OP 更好的方法来做到这一点。是的,将它作为 GET 传递是您首先想到的,但它不一定是最终答案。
      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 2014-09-01
      • 2012-09-09
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多