【问题标题】:My Laravel 5.5 app not working on remote server namecheap VPS after deployment but working fine on local server with WAMP我的 Laravel 5.5 应用程序在部署后无法在远程服务器 namecheap VPS 上运行,但在使用 WAMP 的本地服务器上运行良好
【发布时间】:2020-02-22 12:32:13
【问题描述】:

关于这个应用程序的一切都在我的本地服务器上运行良好,但拒绝远程工作。如果我访问应用程序 www.mysite.com。它总是显示内部服务器错误。虽然我在 web.php 中没有任何路由,但我希望重定向回 404 not found 页面,但没有这样做,但它在 localhost 上。

另一个主要问题是,我在 api.php 中有许多路由,如果我将数据发送到任何路由,它们会接受数据,甚至可能将它们保存在必要的数据库中,但是它永远不会返回我在每次成功操作后定义的 json 响应。即使操作成功,我总是得到的响应是 500 内部服务器错误。我在这个问题上已经讨论了两个多星期了。

我在服务器上使用 PHP 7.2

这是我的 .htaccess 文件

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>
    RewriteEngine On
    RewriteBase /
    # 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

<?php

Route::group(['prefix' => 'user', 'namespace' => 'User'], function () {

    Route::post('/login', 'UserAuthController@userLogin');
    Route::post('/signup', 'UserAuthController@userSignup');

});

UserController.php

public function userSignup(Request $request)
    {
        $rules = [
            'name' => 'required|string|max:200',
            'password' => 'required|between:8,100|confirmed',
            'phone' => 'unique:users|required|digits:11|numeric',
            'email' => 'unique:users|required|email',

        ];
        $validator = Validator::make($request->all(), $rules);
        $code = mt_rand(100000, 900000);
        $hCode = FacadesHash::make($code);
        if ($validator->passes()) {
            $user = User::create([
                'name' => $request['name'],
                'email' => $request['email'],
                'phone' => $request['phone'],
                'otp' => $hCode,
                'password' => FacadesHash::make($request['password']),
            ]);

            $data = [
                'name' => $request['name'], 'subject' => 'Email Confirmation',
                'view' => 'mails.emailconfirm', 'code' => $code
            ];


            return response()->json(['success' => true, 'status' => 200, 'message' => 'Your account has been created successfully and an OTP code has been sent to your email'], 200);
        } else {

            return response()->json(['success' => false, 'status' => 200, 'message' => $validator->errors()->first()], 200);
        }
    }

例如,注册路线运行良好,但永远不会返回我指定的 Json 响应,即使一切顺利,它也会返回 500 内部服务器错误。

如果一切顺利,我的 storage/log 中不会记录任何错误并且我没有得到响应。但是如果操作不成功,我确实会看到错误。

所有文件夹都有 777 权限,我也多次清除所有缓存

【问题讨论】:

  • 你能检查php的错误日志吗?也许在/var/log 中,除非您有自定义配置。如果您说它有时会执行您的代码但仍返回 500,那么我可能会考虑一些中间件,它试图在请求或某些事件之后执行某些操作。最重要的是,服务器上可能缺少一些 php 模块。让我们尝试检查是否可以获得日志消息。
  • 我找到了以下错误日志,您让我检查 [Sat Feb 22 14:37:06.006557 2020] [http:error] [pid 26129:tid 47139616982784] [c lient 105.112.178.154: 24113] AH02429:响应标头名称“Access-Control-Allow -Origin”包含无效字符,正在中止请求
  • 很高兴我能帮上忙。如果您喜欢该评论 - 或对 SO 的任何其他评论 - 那么您也可以将其投票为“有帮助”。您可以在左侧的评论旁边找到它。您将看到一个“upvote”图标和一个“flag”图标,这意味着您可以投票或举报评论。

标签: php laravel-5 vps


【解决方案1】:

问题已解决。问题恰好是我的中间件。

之前是这样配置的

<?php

namespace App\Http\Middleware;

use Closure;

class CORS
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        header('Access-Control-Allow-Origin : *');
        header('Access-Control-Allow-Headers : Content-Type,X-Auth-Token,Authorization,Origin');
        return $next($request);
    }
}

我现在把它改成了下面这个新的,一切都开始完美了

<?php

namespace App\Http\Middleware;

use Closure;

class CORS
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request)
            ->header('Access-Control-Allow-Origin', '*')
            ->header('Access-Control-Allow-Headers', 'Content-type, X-Auth-Token, Authorization, Origin');
    }
}

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2020-08-21
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多