【问题标题】:Route with dot (IP address) not found, returns 404找不到带点(IP 地址)的路由,返回 404
【发布时间】:2017-10-19 19:41:08
【问题描述】:

我使用Lumen 5.4

我的路线是这样设置的:

$app->get('/ip/{ip}', GeoIpController::class . '@show');

{ip} 路由参数应该是一个 IP 地址,其中包含点。但是,当路线中有点时,似乎存在问题。它返回一个 404 not found 错误。

我知道我可以将 IP 地址作为简单的 GET 请求参数传递,但希望 IP 成为 URL 的一部分并像路由参数一样处理。

出于测试目的,我使用php -S localhost:8080 -t public 为应用程序提供服务。

【问题讨论】:

  • 根据我使用 Laravel 的经验,我没有看到路由参数中的点是一个问题,但是,我也从未使用 / 开始路由。据我所知,路由是相对于前缀的(或者 / 如果没有设置前缀),所以 ip/{ip} 是你应该使用的。看看这是否能解决您的 404 问题。
  • 我担心这个请求永远不会到达 Lumen 并且它被服务器以某种方式杀死了。
  • 那么问题与 Lumen 无关?您使用的是什么网络服务器?有什么错误吗?您是否通过 index.php 正确路由了它?
  • 对ip进行基础编码并在控制器中解码
  • @Devon 用于测试目的我使用php -S localhost:8080 -t public/,因为 Lumen 没有像 Laravel 这样的内置服务器。我没有在舞台上登记。我有 nginx。

标签: php laravel lumen lumen-routing lumen-5.4


【解决方案1】:

这是对 PHP 内置服务器的限制,而不是 Lumen(或 Laravel、Slim 或任何其他带有路由器的框架/应用程序)的限制。您可以查看PHP bug report here

基本上,如果 URL 在脚本名称后的 url 中有一个点,则内置服务器会将请求视为静态文件请求,并且它不会真正尝试运行应用程序。

这个请求在真正的 web 服务器(apache、nginx)上应该可以正常工作,但是在 PHP 的内置开发 web 服务器上运行时会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2015-03-27
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多