【问题标题】:Lararvel 4 routes past index page don't work on webfactionsLaravel 4 路由过去索引页面不适用于 webfactions
【发布时间】:2013-11-27 23:07:10
【问题描述】:

我正在尝试使用 WebFactions 来托管我使用 Laravel 4 构建的网站。我已经成功完成了以下教程:http://euantor.com/using-laravel-with-webfaction/

索引页面加载完美,但我链接到的任何其他页面似乎都有问题,给出 500 错误(表明 routes.php 无法正常工作)。

调查一下,似乎我需要更改 apache 服务器的 httpd.conf,而我在 webfactions 上无权访问。我已经尝试使用 laravel 提供的两个 .htaccess 文件(它附带的默认文件,以及这个):

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

但这似乎也没有解决问题。有谁知道让 Laravel 4 在 webfactions 上工作的方法,以便通过索引页面的进一步路由工作?

【问题讨论】:

  • 您可以访问您的网络服务器的错误日志吗?
  • 再具体点routes.php isn't working 还不够,那里安装的PHP 是什么版本,有错误日志吗?
  • 我使用的是 PHP 5.4 并且有错误日志。我收到以下错误:由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”来获取回溯。 环顾四周,我认为这是 .htaccess 文件的问题。我正在使用的那个贴在上面,用<IfModule mod_rewrite.c> ... </IfModule> 包裹。它放在根文件夹中。

标签: php apache .htaccess laravel-4


【解决方案1】:

首先,您确实不需要更改虚拟主机的 httpd.conf 以使 Laravel 正常运行。

根据您提供的信息量有限,无法判断您的配置有什么问题。但是,我可以在 Webfaction(不是 Webfaction)的网站上为您提供一个工作示例配置。

目录结构

/home/myuser
|--> webapps
|  --> mysite  (This is your public web directory)
|--> laravelapps
   --> mysite  (Laravel installation, incl. routes.php)
     --> app
       --> models
       --> views
       --> etc.

为了安全起见,您应该为 Web 内容和 Laravel 文件设置单独的文件夹。换句话说,不要将 Laravel 文件和配置放在你的公共 web 目录下。

网页目录

将需要通过 HTTP 协议获取的任何文件放入此目录:webapps/mysite。例如创建子目录cssjsimages等。

还要确保你的 web 目录的根目录中有两个 Laravel 文件:

  • .htaccess
  • index.php

.htaccess.php 在您的 Web 目录中

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

这样做的目的是将你所有的 Laravel 请求重定向到 index.php。有关这些行的更详细描述,请查看有关非常相似的 .htaccess 的答案:This is the .htaccess code in WordPress. Can someone explain how it works?

您的网络目录中的 index.php

此文件中有两个重要条目。第一个在注册自动加载器部分。确保你有这样的东西(也可以是相对路径):

require '/home/myuser/laravelapps/mysite/bootstrap/autoload.php';

第二个重要条目在打开灯部分。确保它是这样写的(同样可以是相对路径,只要你做对了):

$app = require_once '/home/myuser/laravelapps/mysite/bootstrap/start.php';

Laravelapps 的公共路径

要更改的另一件事位于 Public Path 部分中的 /home/myuser/laravelapps/mysite/bootstrap/paths.php。确保它指向您的网络文件夹,例如:

'public' =&gt; '/home/myuser/webapps/mysite',

其他东西

上面的设置应该可以解决问题。但是,根据您提供的(缺少)信息,无法排除其他 Laravel 配置文件(位于 /home/myuser/laravelapps/mysite/app/config 或文件权限)。请先试试上面的方法,然后告诉我们结果如何?

【讨论】:

  • 非常感谢您提供的所有信息。我实际上更改了解决问题的 .htaccess 文件。我将^ index.php 更改为^(.*)$ /index.php/$1。仍在寻找导致我需要更改的原因,我将检查所有这些行以确保它们是正确的。
猜你喜欢
  • 2021-10-14
  • 2018-02-12
  • 2013-12-20
  • 2016-04-15
  • 2016-12-04
  • 2018-01-04
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多