【问题标题】:Double slash in URL is automatically converted in single slash in $_SERVER['REQUEST_URI']URL 中的双斜杠在 $_SERVER['REQUEST_URI'] 中自动转换为单斜杠
【发布时间】:2019-09-13 15:55:25
【问题描述】:

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

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

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

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

例如:如果我输入 www.example.com//check -> 那么它来了 作为 REQUEST_URI 中的 /check 但我希望它应该作为 //check

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

有人可以帮助我如何防止这种情况发生吗?

【问题讨论】:

  • URL 中额外的"/" 会破坏URL。如果要将其放入查询字符串中,则必须对该值进行编码。
  • 我没有在 URL 中添加斜杠。如果有人在浏览器中操作 URL,我只想添加逻辑,它不应该显示应该显示 404 页面的页面
  • 例如,如果您从我的网站打开任何登录页面并在 url 中添加额外的斜杠,那么它不应该显示该页面@AndreiLupuleasa
  • 有你想要达到的解决方案:stackoverflow.com/questions/29479409/…
  • @AndreiLupuleasa 这不起作用我以前试过。

标签: php laravel amazon-web-services nginx amazon-ec2


【解决方案1】:

Laravel 5.5.5 在路由中引入了一个新特性,称为 Route::fallback()。基本上,如果没有匹配到路由,则回退功能是一种覆盖默认 404 页面并引入额外逻辑的方法。以下是它的工作原理。

Route::fallback(function() {
    return 'Hm, why did you land here somehow?';
});

【讨论】:

  • 实际上,我们没有所有页面的路由,一些路由是登陆页面,我们正在使用 Route::get('{catchall}', 'MyController@suburl')-> 捕获所有路由where('catchall', '.*');所以这个解决方案不起作用
  • 我认为我们需要在服务器级别解决这个问题,即为什么服务器没有从 url 返回双斜杠
  • 它也返回相同的 /check
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多