【问题标题】:Combine Laravel 5 with non-laravel pages结合 Laravel 5 和非 Laravel 页面
【发布时间】:2015-12-10 09:04:08
【问题描述】:

我正在 Laravel 中构建一个应用程序,该应用程序将构建一段时间。同时,我有 2 个“常规”网站,一个静态 html 和一个 php,我想将它们包含在我的源代码管理中,并在我构建 laravel 应用程序时公开访问。

我的公用文件夹是这样设置的:

public/website1/许多文件夹和文件

public/website2/许多文件夹和文件

公共/index.php

我想通过以下方式路由/重定向用户(让我们使用我的开发环境“localhost”作为域):

localhost/laravelapp/ -> index.php

localhost/website1/ -> website1/index.html

localhost/website2/ -> website2/index.php

这样我可以在单个项目/源代码控制/服务器中维护我的所有代码。

但是我该如何路由呢!?

我试过了:

Route::get('/website1', function() {
  return File::get(public_path() . '/website1/index.html');
});

但这只是返回一个没有相对链接到 css 文件夹或其他链接文件的静态文件。如何将用户正确重定向到正确的区域?在 Laravel 框架中重建现有站点不是一种选择。谢谢。

【问题讨论】:

  • laravel 背后的基本概念是他的组件,您可以在非 laravel 页面中轻松使用组件,只需在页面中调用“使用 Illuminate\Contracts\Logging\Log as Log”来实现日志记录功能但是你可以学习 laravel api 以获得进一步的帮助。
  • 我还发现了 https://github.com/mattstauffer/IlluminateNonLaravel 在您的应用程序之外使用 laravel。如果你不想使用这个包,这个包可以给出使用 laravel 组件的基本思路。
  • 谢谢,但我不想在我的非 laravel 页面中使用 laravel 组件 - 我只是想从我的 laravel 应用程序重定向到我的公共文件夹中的标准网站/页面集。

标签: php laravel laravel-5


【解决方案1】:

这应该很简单。我假设您使用的是apache? 如果您在public/website1public/website2 中放置一个单独的.htaccess 文件,那么当您访问这些路由时,将应用这些规则,而忽略public/.htaccess 中的重写规则。 您可以根据需要配置新的 .htaccess 文件,但您只需要

<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

这是在网络服务器级别重新路由的。没有任何东西通过 laravel 传递。这就是你想要的。


现在,我们已经解决了这部分:

localhost/website1/ -> website1/index.html

localhost/website2/ -> website2/index.php

但是 laravel 应用的行为是这样的:

localhost/ -> index.php

代替:

localhost/laravelapp/ -> index.php

要解决这部分问题,请在 public 中创建一个名为 laravelapp 的新目录 并将public/.htaccess 移动到public\laravelapp\.htaccess 并更改以下行

RewriteRule ^ index.php [L]

RewriteRule ^ ../index.php [L]

【讨论】:

  • 这仍然没有按预期工作。恐怕就像您建议的那样,使用 .htaccess 文件。当我访问“localhost/website1/”时,我得到一个“404 Not Found”。当我访问“localhost/website2/”时,我会在我的 laravel 应用程序的根目录中获得索引页面! (不是欢迎页面,应用程序的实际根目录)。 localhost/public 提供 laravel 欢迎页面。 laravel/public 中的任何内容(即 localhost/public/website1/)也提供了欢迎页面(这是公共文件夹的索引页面)。到底是怎么回事!?
【解决方案2】:

通过做几件事来解决这个问题:

1) 网络服务器上的虚拟主机来处理域名路由。在 Apache 服务器上创建一个文件:

httpd/conf.d/vhost.conf

NameVirtualHost *:80

<VirtualHost *>
ServerName domain1.com
ServerAlias dev.domain1.com
DocumentRoot /var/www/html/public
</VirtualHost>

<VirtualHost *>
ServerName domain2.com
ServerAlias dev.domain2.com
DocumentRoot /var/www/html/public/website2    
</VirtualHost>

这将我的域路由到他们的子文件夹

2) localhost 环境运行不正常。我从使用“php -S server.php”(Laravel 自己的服务器脚本配置)切换到 OSX 的 MAMP。这立即清除了我剩余的权限问题。

我希望这个答案可以在将来对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 2015-06-06
    • 1970-01-01
    • 2015-09-05
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多