【问题标题】:.htaccess - not routing to public folder.htaccess - 不路由到公用文件夹
【发布时间】:2015-12-14 11:42:11
【问题描述】:

我的 laravel 安装似乎有问题,当您键入 domainname.com/laravel 而不是显示目录时,我正在尝试将 url 路由到公用文件夹。

但是当我放

<IfModule mod_rewrite.c>
   RewriteEngine On

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

进入 laravel 目录中的 .htaccess;它只是想出了这个。

请告诉我如何解决这个问题。因为我真的不知道。

【问题讨论】:

  • 你能显示一些你定义的routes,并确保你已经将htaccess放在了laravel根目录中
  • 这是一个全新安装,没有定义新的路由,我已将 .htaccess 放在正确的位置;它在 laravel 根目录下。

标签: php .htaccess laravel


【解决方案1】:

听起来您正在尝试将 Laravel 托管在您网站的子目录中。大多数时候,Laravel 应用程序托管在网站的根目录中,即yourdomain.com。但是,您希望您的 Laravel 应用程序显示在 yourdomain.com/laravel 中。正确的?首先,一个警告:

这不是托管 Laravel 应用的推荐方式

但是,如果您真的想将内容移动到子目录中,可以从以下方法开始。

public/ 中创建子目录并将核心 Laravel 文件移动到那里

默认情况下,干净的 Laravel 安装在 public/ 文件夹中有以下文件:

public/
  - .htaccess
  - favicon.ico
  - index.php
  - robots.txt
  - web.config

创建一个子目录并将这些文件移动到其中,例如如果您的子目录名为 laravel/,那么您的新结构将如下所示:

public/
  - laravel/
    - .htaccess
    - favicon.ico
    - index.php
    - robots.txt
    - web.config

请务必不要更改 Laravel 附带的 .htaccess 文件的内容。否则您的网站肯定无法运行。

更新 index.php 使其仍然可以找到 Laravel 核心

public/laravel/index.php 中,您需要更新所有如下所示的行:

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

看起来像:

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

应该有两行需要修改。

此时,如果有人要访问 yourdomain.com/laravel,他们将看到 Laravel 欢迎屏幕。您还可以像在app/Http/routes.php 中通常那样创建路由。例如,如果您的路线文件如下所示:

Route::get('/', function () {
    return view('welcome');
});

Route::get('/hiya', function() {
    return 'hiya!';
});

然后访问yourdomain.com/laravel/hiya 的人会在屏幕上看到“hiya”一词。

这可能会给你带来很多问题

如前所述,Laravel 通常不打算从子目录运行,因此以我描述的方式使用它可能会导致很多问题和意外行为。

但是,您仍然可以在您的 public/ 文件夹中托管静态文件,并以任何网站的方式提供它们。

【讨论】:

  • 谢谢您的解释;我只是将它安装到根目录中;所以我将“laravel”中的所有内部文件放入“www”目录中。这已经奏效了,我在我的本地服务器(即 xampp)上对其进行了测试,它运行良好,所以我在实际服务器上进行了尝试,尽管它确实将您重定向到公共目录.. 它只是显示一个 500 服务器错误页面,有什么建议吗?
  • 我不确定您所说的“root”是什么意思。无论您在硬盘驱动器的哪个位置创建网站,都应配置 Apache,以便 DocumentRoot 指向 Laravel 项目中的 public/ 文件夹。使其工作完全取决于将所有 Laravel 文件保存在彼此相对的相同位置。在我的解释中,我向您展示了如何将 public/ 文件夹中的文件移动到子文件夹,但正如我所解释的,这非常不标准,不推荐。我想我不清楚你以你现在的方式重组 Laravel 的目标是什么。
【解决方案2】:

当您将 project 放置在子目录中时,实际上不推荐放置 laravel 文件的方法,有一个推荐的步骤来正确放置 directory 的内容。首先,将.htaccess 保留为安装时的状态。那么这里有几个steps 可以让您的网站正常工作。

1. You see `public` directory, copy all the contents of the it and `paste` it in your `root` directory and then remove the `public` folder from the original place.
2.  then you make a single folder and put all the contents inside newly created folder except the contents of public folder that you just pasted in your root  

在此之后您的根目录中的结构将类似于

a) contents of public folder
b) a single folder, lets say  `myproject` including all the contents except public

现在,你应该编辑index.php 喜欢

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


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

这里myproject 是您的文件夹名称,您在其中放置了除public 目录内容之外的所有内容

最后,清除所有cache,您的程序应该可以运行了 如果您仍然希望.htaccess 参与您的工作,我建议您在论坛中搜索一下

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 2016-09-19
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2014-08-13
    • 2017-05-21
    相关资源
    最近更新 更多