如何在共享主机的子文件夹中安装 laravel 应用程序?

Posted

技术标签:

【中文标题】如何在共享主机的子文件夹中安装 laravel 应用程序?【英文标题】:How to install laravel app in subfolder of shared host? 【发布时间】:2017-05-15 10:26:14 【问题描述】:

我在共享主机“public_html”的根目录中安装 laravel 应用程序,现在我想在 ru/ 子文件夹中安装此应用程序的俄语版本,但是当我转到 example.com/ru 时出现 404 Page not found 错误。我使用 apache Web 服务器我的根文件夹中的 .htaccess 文件包含这些代码

<IfModule mod_rewrite.c>
   RewriteEngine On 
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

我应该如何更改此配置?

谢谢。

【问题讨论】:

你的目录结构是什么? ru/ 目录下的整个 laravel 应用? 我在根文件夹中有 laravel 应用程序,在子文件夹 /ru 中有另一个 laravel 应用程序 这是我的主机i.stack.imgur.com/BcC2B.png中的目录结构图片 【参考方案1】:

您将按照在根目录中安装它的方式进行操作。我会告诉你我是如何在我的共享主机帐户上安装它的,包括主域和子域。在我将所有项目上传到子文件夹后,您将成为 example.com/ru,请执行以下操作:

    在您的公用文件夹中有您的.htaccess 文件。由于您基本上将其设为子域,因此它需要位于该子域的根目录中,因此将 .htaccess 从公共文件夹转移到 ru 文件夹的根目录。

    打开.htaccess 并更改/添加以下内容:

    DirectoryIndex public/index.php
    

    并在RewriteRule 中将其更改为:

    public/index.php
    

为了清楚起见,您的 .htaccess 在您更改后应该是这样的:

DirectoryIndex public/index.php
<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 ^ public/index.php [L]

    # Handle Authorization Header
    RewriteCond %HTTP:Authorization .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
</IfModule>

【讨论】:

我想要一个 .htaccess 配置,如果 url 以 /ru 文件夹开头,否则转到公共文件夹 对于主站点,您需要一个单独的.htaccess。因为在您的情况下,这基本上是一个“新网站”或子域。试试我上面写的,你会发现它工作正常。 我在 public_html 中有一个 .htaccess,在 /public 中有一个 .htaccess,我在 /ru 中有一个 .htaccess,在 /ru/public 中有一个 .htaccess,应该删除哪一个?哪一个应该改变? 正如我所说,请再次阅读我所说的内容。您不需要 4 或 5 个 ht 访问文件。每个站点/子站点只有一个。您应该保留主站点的 public_html 中的那个。并且您的 public_html 中需要一个用于 ru 文件夹。就是这样。 我做了你的建议,但还是不行,非常感谢【参考方案2】:

在根文件夹中创建一个 .htaccess 文件并粘贴代码并保存。

<IfModule mod_rewrite.c>
 <IfModule mod_negotiation.c>
  Options -MultiViews
 </IfModule>

 RewriteEngine On

 RewriteCond %REQUEST_FILENAME -d [OR]
 RewriteCond %REQUEST_FILENAME -f
 RewriteRule ^ ^$1 [N]

 RewriteCond %REQUEST_URI (\.\w+$) [NC]
 RewriteRule ^(.*)$ public/$1 

 RewriteCond %REQUEST_FILENAME !-d
 RewriteCond %REQUEST_FILENAME !-f
 RewriteRule ^ server.php

【讨论】:

以上是关于如何在共享主机的子文件夹中安装 laravel 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

无法在共享主机中安装流明

VMware虚拟机中安装Ubuntu无法与主机共享上网

如何在CentOS系统中安装字体

在子目录中安装 Laravel

如何使子域指向在根目录中安装了 Laravel 的自定义文件夹?

在 Laravel 项目中安装 FilePond,如何?