URL 中的双斜杠在 $_SERVER['REQUEST_URI'] 中自动转换为单斜杠

URL 中的双斜杠在 $_SERVER['REQUEST_URI'] 中自动转换为单斜杠

我正在一个网站上工作,当有人在 URL 中添加双斜杠时,我需要显示 404 页面。

我已经编写了逻辑来检查 REQUEST_URI,如果有双斜杠,那么我将显示 404 页面...

但是当我在 URL 中添加双斜杠时,它在 REQUEST_URI 中显示单斜杠,但在 URL 中,它是双斜杠...

这里我附上了同一问题的屏幕截图。

例如:如果我输入www.example.com//检查-> 那么它将会变成/查看请求 URI但我希望它应该//查看

网站托管于AWS 云负载均衡器 (ELB). 在本地设置中它可以正常工作,但在生产中它会产生问题。

有人能帮助我怎样才能防止这种情况发生吗?

在此处输入图片描述

答案1

如果问题在于 Google 已将双斜杠版本以及常规路径编入索引,那么最好使用重定向将 Google 发送到正确的路径。

当您用 nginx 标记此问题时,最简单的解决方案是使用选择性重写,例如:

location / {
    if ($request_uri ~ ^//) {
        rewrite ^/.* $uri permanent;
    }
    [...]
}

之所以有效,是因为$request_uri是原始 URI,而 $uri 是规范化的 URI。重写语句将完整的 URI 替换为规范化的 URI,这样 Google 就知道双斜杠版本应该被规范化的 URI 替换。

相关内容