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

Sap*_*aik 2 apache .htaccess mod-rewrite redirect laravel

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

我遵循的步骤:

  • 创建一个子域abc.xyz.com,root->public_html/finance/.
  • 将我的laravel项目上载到与 public_html
  • softlinkpublic我的项目目录public_html/finance/
  • 我发现该操作abc.xyz.com不起作用,但是abc.xyz.com/public这样做了,因此我设置了一个重定向abc.xyz.comabc.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>
Run Code Online (Sandbox Code Playgroud)

那么如何将/public喜欢附加abc.xyz.com/public到所有路线? 我不是很擅长修改,.htaccess但是我从网上尝试了一些解决方案,但是它们没有用。

Gra*_*ham 6

摘自Linux服务器上共享主机上的部署Laravel 5 App。最初的作者是DonkarnashPassionInfinitePete HoustonKyslik。归属详细信息可以在贡献者页面上找到。该来源已获得CC BY-SA 3.0的许可,可以在“ 文档”存档中找到。参考主题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  
Run Code Online (Sandbox Code Playgroud)

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

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

更改:

require __DIR__.'/../bootstrap/autoload.php';   
Run Code Online (Sandbox Code Playgroud)

至:

require __DIR__.'/../laravel/bootstrap/autoload.php';  
Run Code Online (Sandbox Code Playgroud)

并更改:

$app = require_once __DIR__.'/../bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)

至:

$app = require_once __DIR__.'/../laravel/bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)

保存并关闭。

步骤5
现在转到laravel文件夹(在共享主机帐户-server上)并打开server.php文件
Change

require_once __DIR__.'/public/index.php';
Run Code Online (Sandbox Code Playgroud)

至:

require_once __DIR__.'../public_html/index.php';  
Run Code Online (Sandbox Code Playgroud)

保存并关闭。

步骤6
laravel/storage共享主机帐户服务器上的文件夹及其所有文件,子文件夹和其中的文件的文件许可权(递归设置)设置为777
注意:请注意Linux中的文件权限,它们就像一把双刃剑,如果使用不正确,它们可能会使您的应用容易受到攻击。为了了解Linux文件权限,您可以阅读https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

步骤7

由于.env本地/开发服务器的文件被git忽略,因此应将其忽略,因为它具有包括APP_KEY在内的所有环境变量,并且不应通过将其推送到存储库中而公开。您还可以看到该.gitignore文件已.env提及,因此不会将其上传到存储库。

完成上述所有步骤后.env,在laravel文件夹中创建一个文件,并将您从本地/开发服务器.env文件中使用的所有环境变量添加到.env生产服务器文件中。

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

laravel还提供.env-example了可以用作参考的文件。

而已。

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