gpt4 book ai didi

apache - Laravel |共享主机路由无法正常工作

转载 作者:行者123 更新时间:2023-12-02 20:30:17 25 4
gpt4 key购买 nike

我正在尝试在共享主机(godaddy)上部署我的Laravel项目,到目前为止,我仅获得了部分成功。

我遵循的步骤:


创建一个子域abc.xyz.com,根-> public_html/finance/.
将我的laravel项目上传到与public_html处于同一级别的文件夹
softlink我项目的public目录到public_html/finance/
我发现去abc.xyz.com无效,但是abc.xyz.com/public可以,所以我设置了一个重定向,将abc.xyz.com重定向到abc.xyz.com
使Storage可用于网络。
dumpautoload,缓存configroutes
迷恋databases


现在,我可以成功登录,将我带到abc.xyz.com/public,但是所有其他没有/public的路由都无法正常工作。
例如:


abc.xyz.com/public-作品
abc.xyz.com/home-不起作用


我注意到,如果我手动将/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,但是我从网上尝试了一些解决方案,但它们没有用。

最佳答案

摘录自Deploy Laravel 5 App on Shared Hosting on Linux Server。原始作者为DonkarnashPassionInfinitePete HoustonKyslik。归属详细信息可以在contributor page上找到。该源在CC BY-SA 3.0下获得许可,并且可以在Documentation archive中找到。参考主题ID:2410。


默认情况下,Laravel项目的public文件夹公开了该应用程序的内容,任何人都可以从任何地方请求该应用程序的内容,而没有适当权限的任何人都看不到或无法访问其余的应用程序代码。

在开发机器上开发应用程序之后,需要将其推送到生产服务器,以便可以从任何地方通过Internet访问它-对吗?

对于大多数应用程序/网站,首选是使用托管服务提供商(如GoDaddy,HostGator等)提供的共享托管软件包,这主要是因为其成本较低。


注意:您可能会要求提供者手动更改document_root,因此您所要做的就是将您的Laravel应用程序上传到服务器(通过FTP),请求将root更改为{app} / public,这样就可以了。


但是,此类共享主机程序包在终端访问和文件权限方面确实存在限制。默认情况下,必须将其应用程序/代码上传到其共享主机帐户的public_html文件夹中。

因此,如果您想将Laravel项目上载到共享托管帐户,您将如何处理?您是否应该将整个应用程序(文件夹)上传到共享主机帐户的public_html文件夹中? -当然没有

因为public_html文件夹中的所有内容都可以“公开地(即任何人)访问”,所以这将带来很大的安全风险。

将项目上传到共享托管帐户的步骤-Laravel方法

第1步
在与public_html文件夹相同的级别上创建一个名为laravel的文件夹(或您喜欢的任何文件)。

Eg:  
/
|--var
|---www
|----laravel //create this folder in your shared hosting account
|----public_html
|----log


第2步
从laravel项目(在开发计算机上)的 public文件夹(在服务器主机-共享主机帐户上)中复制除 laravel文件夹以外的所有内容。
您可以使用:
-C-panel:这是最慢的选择
-FTP客户端:像FileZilla一样,可以连接到您共享的托管帐户,并通过FTP上传来传输文件和文件夹
-映射网络驱动器:您还可以在开发计算机上创建映射的网络驱动器,以使用“ ftp://your-domain-name”作为网络地址连接到共享主机帐户的根文件夹。

第三步
打开laravel项目的 public文件夹(在开发计算机上),复制所有内容并粘贴到 public_html文件夹(在服务器主机-共享主机帐户上)。
第4步
现在打开共享主机帐户(在cpanel编辑器或任何其他连接的编辑器中)的 index.php文件夹中的 public_html文件,然后:

更改:

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上)并打开 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文件中使用的所有环境变量添加到生产服务器的 .env文件中。

甚至在laravel应用程序的config文件夹中有诸如 app.phpdatabase.php之类的配置文件,默认情况下在 env()的第二个参数中将此变量定义为该变量,但不要硬编码这些文件中的值,因为这会影响拉您的存储库的用户的配置文件。因此,建议手动创建 .env文件!

laravel还会提供 .env-example文件,您可以将其用作参考。

而已。

现在,当您访问在服务器上配置为域的url时,您的laravel应用程序应该像在本地主机-开发机上一样工作,而该应用程序代码仍然是安全的,没有适当文件权限的任何人都无法访问。

关于apache - Laravel |共享主机路由无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44868393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com