【问题标题】:PHP $_SERVER('REQUEST_URI') Showing Unexpected Result (httpd.conf, ssl)PHP $_SERVER('REQUEST_URI') 显示意外结果 (httpd.conf, ssl)
【发布时间】:2018-08-25 23:23:26
【问题描述】:

注意:我不是系统管理员,所以我编辑系统配置文件的知识和能力有些有限。

最近使用全 Https 的服务器没有像切换之前那样显示我们的 404 页面。

未找到

在此服务器上找不到请求的 URL /toh。

此外,在尝试访问时遇到 404 Not Found 错误 使用 ErrorDocument 来处理请求。

在我们的 httpd.conf 页面中,我们有一行

ErrorDocument 404 /admin/404/

当我们将这一行改为

ErrorDocument 404 https://example.com/admin/404/

一切似乎都运行良好; Not Found 错误消失,404 页面正确显示。

然而,

这个 404 页面检测用户最初来自哪里使用

$_SERVER['REQUEST_URI'];

然后该页面将检查数据库,查看该 URI 是否在其中,然后将客户端重定向到适当的页面。

因此,例如,如果用户从以下位置访问页面:

http://example.com/tacos

如果不是有效链接,404 页面会看到 /tacos 链接,在数据库中找到它,并将用户重定向到他/她需要去的地方。

现在,$_SERVER['REQUEST_URI'] 只会吐出

/admin/404

无论用户来自何处。

【问题讨论】:

  • 尝试将强制网站进入 https 的规则放在 .htaccess 文件的顶部,然后清除浏览器缓存并进行测试
  • @Mohammed 规则是在 .conf 文件中设置的,而不是在 .htaccess 文件中。但事实证明问题(据我所知)是 RewriteEngine 已关闭。如果愿意,请参阅我的答案以获取更多信息。谢谢。
  • example.com/tacos 如果链接无效,但使用 https 时,网络服务器是否按照您的预期处理它?
  • @Mohammed 是的,打开重写规则并从 ErrorDocument 中取出域名,据我所知,一切都按预期运行

标签: php apache https


【解决方案1】:

显然问题是双重的:

1) 根据这个线程here,ErrorDocument 链接不能有域名;它必须是格式

ErrorDocument 404 /admin/404

2) 在.conf 文件中,没有开启RewriteEngine;它被注释掉了。所以我们取消了以下规则的注释

<VirtualHost 127.0.0.1:80>
    ...

#    RewriteEngine on
#    RewriteCond %{HTTP_HOST} ^example\.com [NC]
#    RewriteCond %{REQUEST_URI} /$ [NC]
#    RewriteRule ^(.*)/$ https://www.example.com/$1 [L,R=301]
    ...
    RedirectMatch permanent ^(.*)/$ https://www.example.com/$1

</VirtualHost>

现在,找到了 404 页面,并且 $_SERVER(['REQUEST_URI']) 具有适当的资源。

【讨论】:

    猜你喜欢
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2018-05-23
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多