【问题标题】:Laravel basic routing returns 404Laravel 基本路由返回 404
【发布时间】:2015-07-29 21:55:57
【问题描述】:

我最近开始学习 Laravel,但有一个问题我不知道为什么会出现。我目前的 Laravel 项目位于wamp/www/codebright。当我访问 localhost/codebright/public 时,我看到了 Laravel 的欢迎页面。

当我创建一个简单的路由时:

Route::get('my/page', function()
{
    return "Harro world";
});

并尝试访问: localhost/codebright/public/my/page 它返回 404 错误,甚至没有 Laravel 错误。我也尝试过访问:localhost/codebright/my/page 仍然如此。

但是,如果我输入 CMD php artisan serve 并在 8000 端口上打开服务器然后访问: localhost:8000/my/page 它工作得很好。我想知道为什么我的第一个没有artisan 命令的方法不起作用。

提前致谢!

注意

似乎如果您安装了 XAMPP,则上述和答案评论部分中提到的问题都不会发生。基本上,如果您使用 XAMPP,您很可能不会收到任何错误,并且程序可以正常运行。

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    确实可以做你想做的事,但如果你不使用artisan serve,你必须正确设置一个网络服务器。从您的原始帖子中,您显然在获得欢迎页面时设置了一个网络服务器,但在我看来,它类似于以下之一:

    • 您没有 .htaccess 文件
    • 您的 Web 服务器设置上的基本虚拟主机(或 Apache 配置,如果不使用虚拟主机)没有 AllowOverride All(这是允许 .htaccess 文件工作所必需的)
    • 你没有打开mod_rewrite

    你应该看看这些。至少,Laravel 需要一种方法来将不作为真实文件 (my/page) 存在的 URI 转换为可以伪造页面的东西。这几乎需要使用mod_rewrite.htaccess 文件来指定规则。


    解释使用 Apache 和 artisan serve 之间的区别:artisan serve 不使用像 Apache 这样的“愚蠢”网络服务器,而是使用 PHP 内置的网络服务器,该服务器知道如何处理“不存在”的 URI您浏览到,这就是您不需要 mod_rewrite.htaccess 文件的原因。

    【讨论】:

    • 好的,这就解释了问题。有什么建议吗?我应该使用什么? php artisan serve 或直接访问我的 public 文件夹。另请参阅我的 Web 应用程序最终将在其中的主机。我的意思是,当它存储在我的主机公司时,我无法在我的网站上运行 php artisan serve,因此我必须访问 public 目录,正确的?如何修复我的文件以使其正常工作?
    • 绝大多数托管服务提供商都会为您的虚拟主机安装mod_rewrite AllowOverride All,让您可以使用.htaccess 文件。我的观点是,对于整个 PHP 应用程序来说,这是一个非常普遍的要求(Laravel 在这里一点也不特别,这些要求并不疯狂),它们都支持它——如果它们不支持,你需要一个新主机.
    • 在本地你可以做你想做的事,不过我建议你尝试正确设置你的 Apache 环境(以节省每次你在网站上工作时都必须做的事)——它可能只需在命令行上执行sudo a2enmod rewrite,然后检查您的Apache 配置中是否设置了AllowOverride All
    • 即使我将apache/conf/httpd.conf 文件更改为:<Directory /> AllowOverride all Require all granted </Directory>,我仍然无法执行localhost/codebright/public/my/page 之类的操作。在我的public 目录中,这是我的 .htaccess 文件:pastebin.com/zMeyJVnH
    • 您确定启用了mod_rewrite 吗?默认情况下,许多发行版都没有在 Apache 上启用它,但它确实是捆绑在一起的,所以只需要启用。
    【解决方案2】:

    您是否为您的 laravel 项目创建了虚拟主机?

    如果没有这里是如何在窗口中创建虚拟主机

    第一步:打开apache配置文件

    apache\conf\extra\httpd-vhosts.conf
    

    在最后一行添加以下代码。

    <VirtualHost *:80>
        ServerName www.mark-thomas.loc
        DocumentRoot E:\wamp\www\codebright\public
        SetEnv APPLICATION_ENV "development"
        <Directory E:\wamp\www\codebright\public>
            DirectoryIndex index.php
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
    

    E:\wamp\www\codebright\public 是你的 laravel 应用路径,你可以用你的文件夹路径替换它。

    第 2 步: 打开-> Windows\System32\drivers\etc\hosts

    在 IP 地址列表中添加您的 IP 地址

    192.168.1.231 www.laravel.loc

    重启你的 apache 服务器点击http://www.laravel.loc/my/page。现在您将看到您的消息!

    【讨论】:

    • 嘿!你的解决方案和php artisan serve 有什么区别?他们都创建了一个我可以使用的网络服务器。你的创建http://www.laravel.loc 和另一个localhost:8000。我只是询问是否可以从public 目录使其工作,因此我可以键入localhost/codebright/public/my/page 而不是设置虚拟主机并键入localhost:8000/my/page。谢谢!
    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 2021-07-13
    • 2018-02-11
    • 2012-09-14
    • 1970-01-01
    • 2019-04-20
    • 2020-08-26
    • 2016-07-11
    相关资源
    最近更新 更多