繁体   English   中英

Laravel 4路由击中公用文件夹而不是视图文件夹

[英]Laravel 4 routes hitting public folder instead of views folder

我是PHP / Laravel的新手,这可能很愚蠢,但是我无法使它正常工作。 我在routes.php文件中定义了以下两条路由:

Route::get('about', function()
{
    return 'this is about';
});

Route::get('/', array('as'=>'home', function()
{
    return View::make('hello');
}));

如果我以如下方式访问我的应用程序: http : //testapp.dev : 88,它将正确呈现视图。 但是,如果我访问http://testapp.dev:88/homehttp://testapp.dev:88/about之类的应用,则会收到404错误

我检查了apache日志,发现以下错误:

[错误] [客户端127.0.0.1]文件不存在:C:/ tmp / Git_Repository / website / testapp / public / about

[错误] [客户端127.0.0.1]文件不存在:C:/ tmp / Git_Repository / website / testapp / public / home

为什么会这样?

注意:我正在使用Wamp并具有以下Apache 2.2.22配置

<Directory "C:/tmp/Git_Repository/website/">
    AllowOverride All
    Order Deny,Allow
    Allow from all
</Directory>

<VirtualHost *:88>
    DocumentRoot "C:\tmp\Git_Repository\website\testapp\public"
    ServerName testapp.dev
</VirtualHost> 

谢谢你的帮助。

无论如何,您都没有在routes.php文件中声明ib的home路由,您可以尝试以下操作:

<VirtualHost testapp.dev>
    DocumentRoot "C:\tmp\Git_Repository\website\testapp\public"
    ServerName testapp.dev
</VirtualHost>

还要确保已在windows/system32/drivers/etc/host文件中添加了一个条目。 喜欢:

# The ip address could be something like: 127.0.0.10
127.0.0.10 testapp.dev

然后重新启动Apache ,然后重试。

与Apache一起使用时,如果Laravel(或任何其他应用程序)似乎将URL映射到目录结构而不是已定义的路由,则原因很可能是缺少或无效的重写规则。

首先,请确保您的公共目录中包含.htaccess冷却对象, 如下所示

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

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

它包装在if语句中,并且仅在加载Apache模块mod_rewrite适用。 为确保已加载,

在Windows上:

在您喜欢的文本编辑器中打开httpd.conf文件(位于Apache安装文件夹中的某个位置),然后查找该行

#LoadModule rewrite_module modules/mod_rewrite.so

确保通过删除开头的#取消注释

在Linux(可能是Mac)上

赶紧跑

$ a2enmod rewrite

确保在那之后重新启动Apache,您应该一切顺利。

从5.4版开始,PHP附带了一个基本的内置Web服务器。 它不像Apache一样强大,并且不能重写URL,但是仍然可以实现这种行为。 那就是Laravel的server.php的目的。 因此,如果您在开发环境中不需要Apache的全部功能,则可以在Laravel的根目录(非公共目录)中使用PHP的内置服务器,并将其传递给路由器文件:

$ php -S localhost:8000 server.php

现在,您不必担心Apache和重写模块,它可以直接使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM