【发布时间】:2017-09-19 14:39:50
【问题描述】:
我是 PHP 和 Laravel 的新手(我来自 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 错误结束。
但现在我已经按照上一篇文章中给出的建议对我的 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。
好的,现在的问题是:我该怎么做才能正确访问这个网站?
我还是有同样的问题,就是:
- 我仍然可以通过这个 URL 访问 Laravel 登陆页面:http://89.36.211.48/HotelRegistration/public/
- 我仍然通过可怕的 URL 访问注册表单页面:http://89.36.211.48/HotelRegistration/public/index.php/registration
- 提交表单我仍然去http://89.36.211.48/registration 并获得相同的404 Not Found错误页面。
所以我的疑问是:
- 虚拟主机是否配置正确?
- 如果正确,我该怎么做才能正确访问此网站?我需要一个域(如果是:什么必须指向这个域?)或者我可以以某种方式使用进入我的服务器的路径(例如: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