【问题标题】:API routes using Https on laravel gives 404在 laravel 上使用 Https 的 API 路由给出 404
【发布时间】:2019-12-17 08:42:32
【问题描述】:

我创建了一个Laravel API

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

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

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

找不到

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

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

我还有一个 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);
    }

我尝试了以下解决方案:

Force Laravel to use HTTPS version

How to implement HTTPS in laravel 5.4

【问题讨论】:

  • 你能显示你的 MainController@index 吗?你不会在那里扔 404,是吗?
  • @aynber 我为你更新了

标签: php laravel https laravel-routing


【解决方案1】:

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

Cloudflare 示例:

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

【讨论】:

  • 在我的共享主机订阅中,这似乎是我的手,当我联系支持时告诉你它是否有效
  • 为什么不加粗呢?斜体呢?
  • 看看我的浏览器,我会说 bold 确实比 code 的灰色背景更突出 - 从某个角度看几乎不明显。
  • 关于您的链接帖子:它说滥用代码格式的唯一适当原因是如果您需要等宽字体,而不是背景颜色,并且通常不鼓励您使用反引号。我不会进一步讨论这个问题,只是想提一下,你的(自制?)用户体验规则违反了我听说过的所有既定排版规则。只是想知道好的旧闪烁文本何时会回来,因为它在集中注意力方面做得更好......
【解决方案2】:

首先尝试进入GET路由,如果你有403或404,问题是nginx配置,看日志,如果问题是在public_html中找不到index.html是你的根配置nginx 或 apache2

当您在站点中激活 ssl 时,Apache 2 在 /etc/apache2/sites-enabled/ 和 your-domain.conf 中有 te 配置,问题可能是该站点生成另一个 conf 文件,例如您的域。 ssl.conf,这个文件看起来像

ServerName domain.com
ServerAlias www.domain.com
ServerAdmin info@domain.com
DocumentRoot /home/admin/web/domain.com/public_html/public <----- here is the change
ScriptAlias /cgi-bin/ /home/admin/web/pdomain.com/cgi-bin/
Alias /vstats/ /home/admin/web/domain.com/stats/
Alias /error/ /home/admin/web/domain.com/document_errors/
#SuexecUserGroup admin admin
CustomLog /var/log/apache2/domains/domain.com.bytes bytes
CustomLog /var/log/apache2/domains/domain.com.log combined
ErrorLog /var/log/apache2/domains/domain.com.error.log
<Directory /home/admin/web/domain.com/public_html>
    AllowOverride All
    SSLRequireSSL
    Options +Includes -Indexes +ExecCGI
    php_admin_value open_basedir /home/admin/web/domain.com/public_html:/home/admin/tmp
    php_admin_value upload_tmp_dir /home/admin/tmp
    php_admin_value session.save_path /home/admin/tmp
</Directory>
<Directory /home/admin/web/domain.com/stats>
    AllowOverride All
</Directory>
SSLEngine on
SSLVerifyClient none
SSLCertificateFile /home/admin/conf/web/ssl.domain.com.crt
SSLCertificateKeyFile /home/admin/conf/web/ssl.domain.com.key
SSLCertificateChainFile /home/admin/conf/web/ssl.domain.com.ca

<IfModule mod_ruid2.c>
    RMode config
    RUidGid admin admin
    RGroups www-data
</IfModule>
<IfModule itk.c>
    AssignUserID admin admin
</IfModule>

IncludeOptional /home/admin/conf/web/sapache2.domain.com.conf*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-25
    • 2021-04-12
    • 2021-02-20
    • 2020-04-14
    • 2020-06-06
    • 2017-04-04
    • 2019-10-30
    • 2019-12-15
    相关资源
    最近更新 更多