我有一个 Laravel 5 项目,其中设置了路由以及一个自定义 404 页面(主要用于丢失/不正确的“页面”)。
所以基本上,如果我打开任何现有路由,我都会得到正确的输出,并且每个其他 URL 都显示 404:
project.com/login
- 很好,登录页面project.com/ghdkfgl
- 404
这看起来很清楚并且似乎按预期工作。因此,我在斜线后添加的任何内容都会打开实际的现有页面或 404 页面。
除非我在 URL 中的任何位置放置了“index.php”。在这种情况下,Laravel 出于如下原因执行请求:
project.com/jhdfkds/index.php/login
- 打开登录页面(CSS 和其他资源因为路径而消失了,但很清楚)。project.com/kfhjdsg/index.php/fkdhsg
- 打开 404(但 CSS 和其他资源也未加载)。
我确定这两个都应该打开 404,因为我的项目中没有这样的路由。
我还在 Laravel 文档网站上检查了相同的行为(我假设它是基于 Laravel 构建的)。
http://laravel.com/docs/5.0 - 实际网址
http://laravel.com/aaa - 一个不错的 404 页面
http://laravel.com/aaa/index.php/docs/5.0 - Laravel 文档页面再次出现,与第一个相同
这可能是什么原因造成的?如何解决?
为什么 Laravel 甚至会考虑 URL 中间的“index.php”?
这与 .htaccess 文件有什么关系吗? (虽然我没有编辑它)
最佳答案
问题出在 Symfony 内部 Request
类以及它如何确定基本 URL。基本上它假设如果您有类似 aaa/index.php
的请求您当前正在运行的脚本(名为 index.php
)位于目录 aaa
内需要aaa/index.php
作为基本 URL。
稍后它将从实际请求 URI 中剥离。
我用 pull request 修复了这个不需要的行为目前正在审查中。合并后我会尽快更新这篇文章。
关于php - Laravel 是 "listening"到 index.php URL 中任意位置的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666172/