【问题标题】:Why does an asterisk return a forbidden page?为什么星号会返回禁止页面?
【发布时间】:2015-02-13 05:54:43
【问题描述】:

我将 XAMPP 与 Apache/2.4.0 和 PHP/5.6.3 一起使用,我注意到星号 (*) 作为 URL 中的第一个字符,如 http://localhost/* 会导致 apache 返回访问禁止页面在运行 PHP 之前。我没有注意到任何其他网站使用星号字符来做任何事情,所以我知道由于某种原因它一定是无效字符,但我在上面找不到任何东西。有谁知道如何在 xampp 中覆盖它,以便我可以在 PHP 中进行自己的自定义错误管理?

【问题讨论】:

  • 如果我们找不到关于如何覆盖它的信息,那么赏金就是你的了。但我对如何覆盖这种行为感兴趣。我知道 facebook 能够覆盖和解析它。
  • 你希望* 字符发生什么?
  • 我想通过 PHP 提供我自己的自定义错误页面。
  • 绝对是一个棘手的问题。我又花了 30 分钟在上面,似乎无法让它接受。不过,我可以使用 mod_rewrite 轻松获得感叹号。

标签: php apache


【解决方案1】:

自定义错误页面:

编辑文件 conf/extra/httpd-multilang-errordoc.conf
更新包含 ErrorDocument 403 的行,您有 3 个不同的风格:

  • 风格 1,纯文本:              ErrorDocument 403 "What are you doing here ??"
  • 风格 2,本地重定向:       ErrorDocument 403 "/error/myCustom403ErrorPage.html"
  • 风格 3,外部重定向ErrorDocument 403 "http://en.wikipedia.org/wiki/HTTP_403"
  • 注意: *.conf 更新后必须重新启动 Apache 服务器

    星号是保留字符,Apache 使用它的原因如下: "在具有多个用户的系统上,可以使用 UserDir 指令允许每个用户在其主目录中拥有一个网站"
    您可以阅读 Apache 的此文档以了解真正使用的星号 :) Apache - Per-user web directories

    更新: 如果您想将 php 脚本作为错误页面执行(可以使用风味 3)

    ErrorDocument 403 "http://localhost/customWebAppError/error403.php"
    


    更新

  • 创建您的自定义错误页面ERROR_403.html
  • 放在xampp/apache/error
  • ErrorDocument 403 /error/ERROR_403.html更新httpd-multilang-errordoc.conf
  • 在您的 ERROR_403.html 中创建一个 iframeajax 请求,以便与您的服务器通信并提供自定义响应
  • 【讨论】:

    • 这不允许我将 PHP 作为错误页面运行。有没有办法提供 PHP 生成的动态内容?
    • 将产生错误的 URL 重定向到另一个与实际解析产生错误的 URL 不同。我希望错误页面反映导致错误的 URL。
    • 星号是 Apache 配置文件中的一个特殊字符,但它可以在 URL 中使用。至少,它提供一个名为* 的文件没有任何问题。
    • 这仍然是重定向,一旦到达 PHP,就会导致 URL 中没有星号的 URL。我已经获得了赏金,因为这是最有帮助的,但我仍然不知道如何通过禁用 Apache 在 URL 中的错误检查来直接用 PHP 解析该页面。
    【解决方案2】:

    可能是因为它是一个保留字符。

    http://www.w3.org/Addressing/URL/4_URI_Recommentations.html

    星号(“*”,ASCII 2A hex)和感叹号(“!”,ASCII 21 hex)保留用于在特定方案中具有特殊意义。

    解释(简要...):

    https://www.rfc-editor.org/rfc/rfc3986

    关于字符的第 2 部分已被重写以解释什么
    字符被保留,何时被保留,以及为什么被保留
    保留,即使它们不被泛型用作分隔符
    句法。解码通常不安全的标记字符,
    包括感叹号 ("!")、星号 ("*")、单引号
    ("'") 以及左括号和右括号("(" 和 ")")已被移动
    到保留集以明确区分
    保留和未保留,希望能回答最常见的问题
    方案设计者的问题。同样,关于
    的部分 百分比编码的字符已被重写,并且 URI 规范化器
    现在被授予解码任何百分比编码八位字节的许可

    我已经使用 mod_rewrite 进行了测试,但仍然是 403 错误。不过,它似乎确实适用于查询字符串:?whatever*

    【讨论】:

      【解决方案3】:

      由于它使用 php 和 apache 二进制文件和自定义配置在我的 Windows 上工作,因为它在我的 linux 服务器上的工作方式相同,我应该假设它必须是默认 XAMPP 配置的问题。

      您应该尝试禁用一些 apache 或 php 模块,这些模块可能会避免正确提取 url。 (缓存、加速器……)

      有关信息,我使用以下方法进行了测试:

      RewriteEngine On
      RewriteBase /
      RewriteRule ^(.*) index.php?page=$1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-20
        • 1970-01-01
        • 2013-10-17
        • 2014-02-25
        相关资源
        最近更新 更多