【问题标题】:install multiple Laravel 4 projects to sub directories将多个 Laravel 4 项目安装到子目录
【发布时间】:2014-03-14 23:09:44
【问题描述】:

我正在尝试将多个 Laravel 4 项目上传到我的 Web 服务器,而不是我的开发服务器。每个 laravel 4 应用程序都位于它们自己的子目录中。我的文件结构应该如何?我已经四处搜索了一个 htaccess 以从 url 中删除 /public,但我没有成功。此服务器仅用于测试目的,它允许其他人在项目构建时跟进。我知道将 laravel 基础结构留在这些目录中是主要的安全问题,但它们再次仅用于测试目的,当项目完成后,它们将被删除并放置在自己的托管服务器上。这是我现在的文件结构:

-public_html/ 
main website html files
          -Test Site Subdirectory Folder
          -subdirectoryFolder
            -Store/
             -laravel app 1
      -blog/
        -laravel app 2
      -newspaper
        -laravel app 3

如果我在每个子目录文件夹(www.testsite.com/Storewww.testsite.com/blogwww.testsite.com/newspaper)中安装 laravel 应用程序,每个应用程序都可以工作,但是我试图在 url 末尾删除公共,www.testsite.com/Store/public 是什么显示在浏览器中。非常感谢您对此问题的任何帮助。谢谢。

【问题讨论】:

  • 能否告诉我如何运行 laravel app 1 或其他的路由?

标签: php .htaccess laravel-4 subdirectory


【解决方案1】:

看起来我的开发结构正是您想要做的。所以我有这个文件夹结构:

var
|-- www
    |-- Store
    |    |-- app 
    |    |-- bootstrap 
    |    |-- ...
    |-- blog
         |-- app 
         |-- bootstrap 
         |-- ...

这是我的虚拟主机文件/var/www/Store/vhost.conf

Alias /Store "/var/www/Store/public"
<Directory /var/www/Store>
  Options Indexes Includes FollowSymLinks MultiViews
  AllowOverride AuthConfig FileInfo Indexes
  Order allow,deny
  Allow from all
</Directory>

是的,我把它放在我的项目文件夹中,并在 /etc/apache2/apache2.conf 中添加一个包含:

Include /var/www/Store/vhost.conf

这是我的 .htaccess 文件:

<IfModule mod_rewrite.c>
    #Options -MultiViews
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /Store/index.php/?$1 [L]
</IfModule>

我只需要击中

 http://server.dev/Store

 http://[ipaddress]/Store

去看看。

我已经构建了一个小脚本来为我完成所有这些工作:https://github.com/antonioribeiro/laravel-installer。它在我需要的任何文件夹中下载、安装、配置和启动 Laravel 应用程序,做任何必要的事情。兼容基于 Debian 的发行版,例如 Ubuntu。

编辑

请注意,有两件事会从您的网址中删除 /public/index.php

1) /Store 直接指向您的公用文件夹:

Alias /Store "/var/www/Store/public"

2) 和重写规则以使您的 url 从 index.php: 中保持干净:

RewriteRule ^(.*)$ /Store/index.php/?$1 [L]

【讨论】:

  • +1 .... 只是在这里提一下,如果项目相关,那么使用 laravel 域路由分组制作子域要容易得多。 :)
  • 项目不相关。这是在实时服务器上,而不是我的开发服务器
  • 开发与否无关紧要(你的是测试服务器),这是通用的 apache 配置,即使你在生产服务器上使用它也可以工作。如果您希望我们检查您的配置,您应该提供您的配置文件。如果您的本地配置在您的服务器上不起作用,看起来您的服务器与您的本地服务器有很大不同,因此您必须了解这些差异。我在此处发布的那些配置文件可以提示您如何从您的网址中删除 /public
  • 我的开发服务器工作正常。我将应用程序上传到开发服务器以供其他人测试用户交互,仅用于反馈目的。但是,当我上传到我的服务器并输入 www.mylivedomain.com/Store 时,我会得到该目录中的文件列表,其标题为 /Store。我试过你的 htaccess 文件,但不确定我将 /project1/index.php 更改为什么。我尝试使用 public/index.php 和 Store/index.php...没有变化,仍然显示该文件夹中的文件列表。
  • 但是,如果我单击该列表中的公用文件夹,它会显示带有 www.liveserver.com/Store/public 网址的主页。我确实希望删除网址中的公众。我也将 htaccess 文件放在公用文件夹和公用文件夹之外,我不确定应该放在哪里。
【解决方案2】:

将每个公共目录中包括index.php 的所有内容分别移动到Store、Blog 和Newspaper。并更改以下行:

require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/start.php';

require __DIR__.'/bootstrap/autoload.php';

$app = require_once __DIR__.'/bootstrap/start.php';

祝你好运。

编辑:抱歉。您还必须编辑/bootstrap/paths.php,更改

 'public' => __DIR__.'/../public',

'public' => __DIR__.'/../',

【讨论】:

  • 只是为了澄清。当我输入网址 www.testsite.com/Store 时,当我单击公共文件夹时,我会得到该文件夹​​中的文件列表(/Store 的索引),然后显示主页,但它具有 www.testsite 的网址。 com/Store/public ....我正在尝试在 url 中删除该公共。当我尝试你的建议时,我只是得到一个空白屏幕。
  • 这是在实时服务器而不是开发服务器上
  • 能否告诉我如何从 laravel app 2 或 laravel app 3 访问/运行 laravel app 1 或其他人的路由?
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多