【发布时间】:2014-02-09 18:58:30
【问题描述】:
我有一个用 Laravel 编写的 webapp,它需要在 web 主机上的文件夹中运行。
该应用程序必须可以通过hostname.com/webhit/ 访问。这将指向应用的主页。
我只有一条路线:
Route::controller('/', 'HomeController');
HomeController 的 getIndex 需要服务于主页。 这行得通。
但是,只要我想转到 hostname.com/webhit/login 之类的东西,我就会从 Apache 得到一个 404。
显然,.htaccess 无法正常工作。本质上,我需要它来将看起来像 hostname.com/webhit/login 的 URL 转换为 hostname.com/webhit/index.php/login。
我在www/webhit(index.php 所在的位置)中有一个.htaccess 文件,如下所示:
<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>
我对@987654332@文件语法不是很熟悉,但我相信它做错了什么。
编辑:
我做到了。我的.htaccess 是错误的(它实际上会导致重定向循环),但问题是它甚至没有被 Apache 解析(因此由于请求中的 >10 重定向而导致 404 而不是 500)。为了让一切正常工作,我执行了以下步骤:
- 启用
mod_rewrite并重新启动 Apache(那里有很多关于如何执行此操作的文档) - 但是等等,还有更多!默认情况下,Ubuntu 上的 Apache 会阻止 URL 重写。 See this site。最重要的是,上面 URL 中的以下片段非常重要:“默认情况下,Ubuntu 的 Apache 会忽略 .htaccess 文件中的指令。”您需要通过编辑
\etc\apache2\sites-available\default并将 AllowOverride 设置为 all 来实际启用重写(有关更多详细信息,请参见上面的链接)。 - 重新加载配置(或只是重新启动 apache)。
- 确保您使用的是正确的
.htaccess。我的原始版本实际上有一个重定向循环。请参阅所选响应以了解正确的版本。
在这之后,我开始工作了。希望对以后遇到类似问题的程序员有所帮助!
【问题讨论】:
标签: php apache .htaccess laravel