Laravel在webhost上的子文件夹中

时间:2014-02-08 12:48:13

标签: php apache .htaccess laravel

我有一个用Laravel编写的webapp,需要在Web主机上的文件夹中运行。 该应用必须通过hostname.com/webhit/访问。这将指向应用程序的主页。

我只有一条路线:

Route::controller('/', 'HomeController');

HomeController的getIndex需要提供主页。 这有效。

然而,只要我想要hostname.com/webhit/login之类的东西,我就会从Apache获得404.

显然,.htaccess无法正常工作。实际上,我需要将hostname.com/webhit/login看似hostname.com/webhit/index.php/login的网址转换为.htaccess

我在www/webhitindex.php所在的位置)有一个<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ webhit/index.php/$1 [L] </IfModule> 文件,如下所示:

.htaccess

我对.htaccess文件语法不太熟悉,但我认为它做错了。

编辑:

我做到了。我的mod_rewrite错了(它实际上导致了重定向循环),但问题是它甚至没有被Apache解析(因此在请求中由于&gt; 10重定向导致404而不是500)。为了让一切顺利,我做了以下步骤:

  1. 启用\etc\apache2\sites-available\default并重新启动Apache(关于如何执行此操作的大量文档)
  2. 但等等,还有更多!默认情况下,Ubuntu上的Apache会阻止URL重写。 See this site。最重要的是,上面的URL中的以下片段非常重要:“通过默认,Ubuntu的Apache将忽略 .htaccess文件中的指令。”您需要通过编辑.htaccess并将AllowOverride设置为all来实际启用重写(请参阅上面的链接以获取更多详细信息)。
  3. 重新加载配置(或只重启apache)。
  4. 确保您使用的是正确的{{1}}。我的原始版本实际上有一个重定向循环。请参阅所选响应以获取正确的版本。
  5. 在此之后,我开始工作了。我希望它可以帮助未来的程序员遇到类似的问题!

1 个答案:

答案 0 :(得分:1)

检查默认服务器要求 - laravel .htaccess文件适用于大多数情况。试试这个:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

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

我建议您使用资源丰富的控制器 - 从您的路由到控制器方法的映射更清晰,您将获得满 具有一个命令的资源(路径,模型,视图,控制器)