我正在尝试在共享主机(godaddy)上部署我的Laravel项目,到目前为止,我只是部分成功了。
我遵循的步骤:
abc.xyz.com
,root - > public_html/finance/.
public_html
softlink
我的项目的public
目录到public_html/finance/
abc.xyz.com
不起作用,abc.xyz.com/public
这样做了,所以我设置了一个重定向,将abc.xyz.com
重定向到abc.xyz.com
Storage
可供网络访问。dumpautoload
,缓存config
和routes
。databases
。现在我可以成功登录,这会将我带到abc.xyz.com/public
但是我没有/public
的所有其他路由都不起作用。
例如:
我注意到,如果我手动将/public
添加到他们工作的所有路线!所以abc.xyz.com/public/home
有效。
我的.htaccess:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
那么如何将/public
abc.xyz.com/public
添加到所有路线?
我不是很擅长修改.htaccess
,但我尝试了一些来自网上的解决方案,但它们没有用。
答案 0 :(得分:3)
摘自Deploy Laravel 5 App on Shared Hosting on Linux Server。原作者是Donkarnash,PassionInfinite,Pete Houston和Kyslik。归因详情可在contributor page上找到。该来源在CC BY-SA 3.0下获得许可,可以在Documentation archive中找到。参考主题ID:2410。
默认情况下,Laravel项目的public
文件夹会公开应用程序的内容,任何人都可以从任何地方请求,其他应用程序代码对于没有适当权限的人来说是不可见的或无法访问的。
在开发机器上开发应用程序后,需要将其推送到生产服务器,以便可以从任何地方通过互联网访问 - 对吗?
对于大多数应用程序/网站,首选是使用托管服务提供商(如GoDaddy,HostGator等)的共享托管包,主要是因为成本低。
注意:您可以要求您的提供商手动更改 document_root ,因此您只需将Laravel应用程序上传到服务器(通过FTP),请求更改root到 {app} / public ,你应该很好。
但是,此类共享主机软件包在终端访问和文件权限方面存在限制。默认情况下,必须将其应用/代码上传到其共享主机帐户上的public_html
文件夹。
因此,如果您想将Laravel项目上传到共享主机帐户,您会怎么做?您应该将整个应用程序(文件夹)上传到共享主机帐户的public_html
文件夹吗? - 肯定没有
因为public_html
文件夹中的所有内容都可以访问&#34;公开,即任何人都可以使用#34;这将是一个很大的安全风险。
将项目上传到共享主机帐户的步骤 - Laravel方式
第1步
在与public_html
文件夹相同的级别上创建一个名为laravel(或您喜欢的任何内容)的文件夹。
Eg:
/
|--var
|---www
|----laravel //create this folder in your shared hosting account
|----public_html
|----log
第2步
从public
文件夹(在服务器主机 - 共享主机帐户上)的laravel项目(在开发计算机上)复制除laravel
文件夹之外的所有内容。
你可以使用:
- C面板:这是最慢的选择
- FTP客户端:如 FileZilla 连接到您的共享主机帐户并通过FTP上传传输您的文件和文件夹
- 映射网络驱动器:您还可以在开发计算机上创建映射网络驱动器,以使用&#34; ftp://your-domain-name&#34;连接到共享主机帐户的根文件夹。作为网络地址。
第3步
打开laravel项目的public
文件夹(在开发计算机上),复制所有内容并粘贴到public_html
文件夹中(在服务器主机上 - 共享主机帐户)。
第4步
现在打开共享主机帐户的index.php
文件夹中的public_html
文件(在cpanel编辑器或任何其他连接的编辑器中)和:
更改:
require __DIR__.'/../bootstrap/autoload.php';
收件人:
require __DIR__.'/../laravel/bootstrap/autoload.php';
并更改:
$app = require_once __DIR__.'/../bootstrap/app.php';
收件人:
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';
保存并关闭。
第5步
现在转到laravel
文件夹(在共享主机帐户 - 服务器上)并打开server.php
文件
更改
require_once __DIR__.'/public/index.php';
收件人:
require_once __DIR__.'../public_html/index.php';
保存并关闭。
第6步
将laravel/storage
文件夹(递归)以及共享主机帐户中的所有文件,子文件夹和文件的文件权限设置为777
。
注意: 小心linux中的文件权限,它们就像双刃剑,如果使用不当,它们可能会使你的应用容易受到攻击。要了解Linux文件权限,您可以阅读https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
第7步
由于本地/开发服务器的.env
文件被git忽略,因此它应该被忽略,因为它包含所有环境变量,包括APP_KEY,并且不应该通过将其推送到存储库来公开它。 ;。您还可以看到.gitignore
文件中提到了.env
,因此它不会将其上传到存储库。
完成上述所有步骤后,在laravel文件夹中创建一个.env
文件,并将您使用的所有环境变量从本地/开发服务器的.env
文件添加到{ {1}}生产服务器的文件。
即使在laravel应用程序的配置文件夹中有.env
,app.php
等配置文件,它在database.php
的第二个参数中默认定义了这些变量,但并不难 - 对这些文件中的值进行编码,因为它会影响拉动存储库的用户的配置文件。因此建议手动创建env()
文件!
laravel还提供了.env
文件,您可以将其用作参考。
那就是它。
现在,当您访问使用服务器配置为域的URL时,您的laravel应用程序应该像在localhost - development机器上一样工作,而应用程序代码仍然是安全的,没有适当文件的任何人都无法访问权限。
答案 1 :(得分:1)
您可以将public / .htaccess和public / index.php移动到laravel项目的根文件中。
答案 2 :(得分:1)
您需要将网站的文档根目录更改为应用程序的公用文件夹,即
public_html/finance/.
应该是:
public_html/finance/public
https://laravel.com/docs/5.4/installation#configuration
希望这有帮助!
答案 3 :(得分:0)
问题是您已将整个项目放在公共目录中 - public_html,不是吗?这是一种不好的做法(安全)。
您的域名(abc.xyz.com)指向您的应用程序根目录,应该转到app / public目录。
答案 4 :(得分:0)
更新解决方案:需要 DIR 。'/ .. / bootstrap / autoload.php';
现在:需要 DIR 。'/ .. / vendor / autoload.php';
因此,更改为 require __DIR__.'/../laravel/vendor/autoload.php';