【问题标题】:Not able to redirect using .htaccess in case of child page( please read the description)如果是子页面,则无法使用 .htaccess 进行重定向(请阅读说明)
【发布时间】:2020-07-02 16:18:47
【问题描述】:

我正在尝试在 404 的情况下重定向。如果未知页面位于 root 上,我可以重定向 www.example.com/unknown 将使用 .htaccess 将其重定向到自定义错误页面,但无法将 www.example.com/newpage.php/unknown 之类的页面重定向到错误页面,而是在此显示没有任何样式的 newpage.php 在 .htaccess 中我使用的是“ErrorDocument 404 /error-404.php”这个代码。

请帮忙。

【问题讨论】:

  • 请发布您的 htaccess 以查看您目前拥有的内容
  • 当请求newpage.php时,页面被找到——即newpage.php被定位,并接收/unknown作为参数。由于找到了页面,所以没有创建 404。
  • 在.htaccess中我只有“ErrorDocument 404 /error-404.php”这个,没有别的了。

标签: php .htaccess redirect server


【解决方案1】:

当请求newpage.php时,页面被找到——即newpage.php被定位,并接收/unknown作为参数。由于找到了页面,所以没有创建 404。这是 Apache HTTP 服务器的一个特性,通过PATH_INFO 环境变量(通常以$_SERVER['PATH_INFO'] 提供)暴露newpage.php 之后的路径。

你可以控制这个behaviour through the AcceptPathInfo setting,可以在.htaccess文件中设置。要禁用该功能,请将其设置为关闭:

AcceptPathInfo Off

说明:资源接受尾随路径名信息

语法:AcceptPathInfo On|Off|Default

默认:AcceptPathInfo 默认

上下文:服务器配置、虚拟主机、目录、.htaccess

该指令控制是否接受或拒绝包含跟随实际文件名(或现有目录中不存在的文件)的尾随路径名信息的请求。 PATH_INFO 环境变量中的脚本可以使用尾随路径名信息。

例如,假设位置/test/ 指向一个仅包含单个文件here.html 的目录。然后对/test/here.html/more/test/nothere.html/more 的请求都将/more 收集为PATH_INFO

没有应用任何样式的原因是你有一个到你的样式表的相对链接,当路径显示为newpage.php 的子目录时,来自浏览器的实际请求将是/newpage.php/stylesheet.css

【讨论】:

    【解决方案2】:

    您可能只使用了 2 个必需规则之一:

    Redirect 404 /error.php          <- redirect if there is an error
    ErrorDocument 404 /error.php     <- redirect if the file is not found
    

    最好在VirtualHost 级别使用这些规则,而不是htaccess 如果你想在任何地方使用这些规则

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      相关资源
      最近更新 更多