【问题标题】:Why I can't correctly deploy this Laravel web site on my remote Linux server? Is it a virtual host configuration issue?为什么我不能在我的远程 Linux 服务器上正确部署这个 Laravel 网站?是虚拟主机配置问题吗?
【发布时间】:2017-09-19 14:39:50
【问题描述】:

我是 PHPLaravel 的新手(我来自 Java),我非常疯狂地尝试正确部署一个运行良好的 Laravel 5.4 项目在我的 Linux 服务器上的 XAMPP 本地环境中。问题应该与虚拟主机配置有关,但我也找不到解决方案,同时提出问题和阅读文档。

在我的本地环境中(我在 Windows 上使用 XAMPP)我已将此虚拟主机设置到 C:\xampp\apache\conf\extra\httpd-vhosts.conf 文件中:

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/HotelRegistration/public"
    ServerName laravel.dev
</VirtualHost>

所以打开 laravel.dev URL 我得到了标准的 Laravel 主页(我还没有用登陆页面替换它)。

如果我打开这个网址:http://laravel.dev/registration

我获得了我开发的用户注册页面,这是因为我有这个路由到我的web.php文件到我的项目中:

Route::resource('/registration', 'RegistrationController');

然后进入我的 RegistrationController.php 有这个方法显示 resources/views/registration/index.blade.php 视图

public function index(){
    return view('/registration/index');
}

在本地环境中,laravel.dev vhost 指向我的 Laravel 网站的 document root,它可以正常工作。

现在我已经将这个 Laravel 网站上传到我的远程 Linux 服务器,到这个文件夹:/var/www/html/HotelRegistration

但是现在我的问题是,在这个远程环境中我没有虚拟主机(如果我做错了断言,请纠正我:据我所知,虚拟主机用于本地环境来模拟 Laravel 需要的域指向公用文件夹,这个推理正确吗?)

无论如何,这是我在远程服务器上部署的网站的 public 文件夹的 URL:

http://89.36.211.48/HotelRegistration/public/

如您所见,打开 Laravel 登录页面正确显示,问题是我可以访问以前的注册页面,我发现的唯一方法是打开此 URL:

http://89.36.211.48/HotelRegistration/public/index.php/registration

但这非常可怕,最重要的是,当提交注册表单时,它会生成一个指向此 URL http://89.36.211.48/registration 的 POST 请求,该请求以 404 Not Found 错误结束。

过去我在这里解释过情况:What is wrong in the deploy of this Laravel application? Need I an effective domain instead the vhost used on my local environment?

但现在我已经按照上一篇文章中给出的建议对我的 Apache 配置进行了一些更改(根据我的文件夹结构调整答案)。

所以进入这个 Apache 文件夹 /etc/apache2/sites-available 我创建并启用了与我的新 vhost 相关的 laravel.dev.conf strong>,具有此配置:

<VirtualHost *:80>
     ServerAdmin mymain@gmail.com
     ServerName 89.36.211.48
     ServerAlias www.laravel.dev
     DocumentRoot /var/www/html/HotelRegistration/public/
     ErrorLog /var/www/html/HotelRegistration/storage/logs/error.log
     CustomLog /var/www/html/HotelRegistration/storage/logs/access.log combined
     <Directory /var/www/html/HotelRegistration/public/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        Allow from all
        Require all granted
     </Directory>
</VirtualHost>

路径与该网站在我的远程服务器上的安装位置有关我绝对不确定这些配置是否正常,特别是关于 ServerName 值(我在这里输入了我的服务器的 IP,对吗?)

然后我使用这个语句启用了这个虚拟主机:

sudo a2ensite laravel.dev.conf

然后我重新启动 apache。

好的,现在的问题是:我该怎么做才能正确访问这个网站?

我还是有同样的问题,就是:

所以我的疑问是:

  1. 虚拟主机是否配置正确?
  2. 如果正确,我该怎么做才能正确访问此网站?我需要一个域(如果是:什么必须指向这个域?)或者我可以以某种方式使用进入我的服务器的路径(例如:http://89.36.211.48/HotelRegistration/

【问题讨论】:

  • 我也在本地使用虚拟主机,但在远程服务器上我不这样做,因为它通常比我当前的解决方案更复杂。那就是将完整项目复制到您的应用程序文件夹(在您的情况下为“HotelRegistration”)中的单独文件夹(例如“系统”)中,然后在应用程序文件夹(“系统”上方)中从“公共”文件夹和index.php中复制所有项目改变你在那里的路径,例如从require __DIR__.'/../bootstrap/autoload.php';require __DIR__.'/system/bootstrap/autoload.php'; 这样您的起始页将位于89.36.211.48/HotelRegistration
  • @jakob 拜托,你能更好地解释一下你的解决方案吗(一步一步)
  • 您的远程服务器的 Web 根目录中是否有 .htaccess 文件?
  • 检查你的服务器是否启用了 apache mod rewrite

标签: php apache laravel laravel-5 laravel-5.4


【解决方案1】:

我在这里扩展我的评论。

像图片一样设置文件夹结构:

index.php 中更改路径如下:

第 22 行

require __DIR__.'/system/bootstrap/autoload.php';

第 36 行

$app = require_once __DIR__.'/system/bootstrap/app.php';

这就是我在将 Laravel 应用程序传输到服务器时所做的所有事情(并为数据库更改 .env)。有时我必须更改存储文件夹的权限,但仅此而已。

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2016-04-02
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多