首页 > 解决方案 > 在 laravel 上使用 Https 的 API 路由给出 404

问题描述

我创建了一个Laravel API

首先,它使用的是 HTTP,我需要将其更改为使用 https。

因此,我在 Cloudflare 上创建了一个帐户,从那时起,当我访问我的 API 端点时:

GET:https ://www.traapp.tk/api/data/20190809它给出了 404:

未找到

在此服务器上未找到请求的 URL /api/data/20190809。

此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

我也有一个 POST 请求,它返回一个 404。

.htacces

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

api.php

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});


Route::get('data/{date}', 'MainController@index');

Route::post('route', 'MainController@getAllRoutesOfACertainDay');

MainController

public function index ($date) {
        $responseServer = json_decode($this->makeRequest(str_replace('DATE', $date, env('BASE_URL') . env('SCHEDULES'))),true);
        return $this->respond($responseServer);
    }

我尝试了这样的解决方案:

强制 Laravel 使用 HTTPS 版本

如何在 laravel 5.4 中实现 HTTPS

标签: phplaravelhttpslaravel-routing

解决方案


那是您的 404,Web server而不是您的laravel. 我猜您忘记将 Vhost 配置中声明的端口从80更改为443

Cloudflare 示例:

<VirtualHost *:443>
    ServerName.....

推荐阅读