【问题标题】:Laravel in subfolder on webhostLaravel 在 webhost 的子文件夹中
【发布时间】: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/webhitindex.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>

我对@9​​87654332@文件语法不是很熟悉,但我相信它做错了什么。

编辑:

我做到了。我的.htaccess 是错误的(它实际上会导致重定向循环),但问题是它甚至没有被 Apache 解析(因此由于请求中的 >10 重定向而导致 404 而不是 500)。为了让一切正常工作,我执行了以下步骤:

  1. 启用 mod_rewrite 并重新启动 Apache(那里有很多关于如何执行此操作的文档)
  2. 但是等等,还有更多!默认情况下,Ubuntu 上的 Apache 会阻止 URL 重写。 See this site。最重要的是,上面 URL 中的以下片段非常重要:“默认情况下,Ubuntu 的 Apache 会忽略 .htaccess 文件中的指令。”您需要通过编辑 \etc\apache2\sites-available\default 并将 AllowOverride 设置为 all 来实际启用重写(有关更多详细信息,请参见上面的链接)。
  3. 重新加载配置(或只是重新启动 apache)。
  4. 确保您使用的是正确的.htaccess。我的原始版本实际上有一个重定向循环。请参阅所选响应以了解正确的版本。

在这之后,我开始工作了。希望对以后遇到类似问题的程序员有所帮助!

【问题讨论】:

    标签: php apache .htaccess laravel


    【解决方案1】:

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

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

    我建议你使用 resourceful 控制器 - 从你的路由到你的控制器方法的映射更加清晰,你会得到充分的 一个命令的资源(路由、模型、视图、控制器)

    【讨论】:

    • 感谢您的回复!我也尝试过默认的 laravel .htaccess,但无济于事。我会尽快尝试这个版本,然后回来提供更多信息。另外,我正在使用资源丰富的控制器!我的主页正在getIndex() 内处理。
    • 我注意到 mod_rewrite 已禁用。我启用了它(现在在执行 print_r(apache_get_modules());die(); 时显示),重新启动 Apache,更新了 .htaccess 文件,但仍然出现 404 错误。
    • 好的,我将使用我采取的其他步骤来编辑我的问题。我必须启用模块本身,并实际告诉 Apache 进行重写。
    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2014-06-15
    • 2015-10-19
    • 2018-02-25
    • 2016-05-04
    • 2020-04-01
    相关资源
    最近更新 更多