Laravel 正在“侦听”索引 URL 中任何位置.php字符串

2022-08-30 17:16:11

我有一个Laravel 5项目,设置了路由以及自定义404页面(主要用于丢失/不正确的“页面”)。

因此,基本上,如果我打开任何现有路由,我会获得正确的输出,并且所有其他URL都显示404:

  • project.com/login- 精细,登录页面

  • project.com/ghdkfgl- 404

这看起来很清楚,似乎按预期工作。因此,我在斜杠之后添加的任何内容都会打开实际的现有页面或404页面。

除非我在URL中的任何位置放置“索引.php”。在这种情况下,Laravel 出于以下原因执行请求:

  • project.com/jhdfkds/index.php/login- 打开登录页面(CSS和其他资源由于路径而消失,但这很清楚)。

  • project.com/kfhjdsg/index.php/fkdhsg- 打开404(但CSS和其他资源也没有加载)。

我相信这两个都应该打开404,因为我的项目中没有这样的路线。

我还在Laravel文档网站上检查了相同的行为(我假设它是在Laravel上构建的)。

可能导致这种情况的原因是什么?如何解决这个问题?

为什么Laravel甚至会考虑URL中间的“索引.php”?

这与 .htaccess 文件有什么关系吗?(我没有编辑它)


答案 1

问题在于 Symfony 类内部,以及它如何确定基 URL。基本上,它假设如果你有一个这样的请求,你当前运行的脚本(名为)在目录内,作为基URL。
稍后,它将从实际请求 URI 中剥离。Requestaaa/index.phpindex.phpaaaaaa/index.php

我通过当前正在审核的拉取请求修复了此不需要的行为。一旦合并,我将立即更新这篇文章。


答案 2

当我在从url跳过公共时,我在laravel 3中遇到了同样的问题。然后我已经在公用文件夹中放置了另一个htaccess文件。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

推荐