Laravel 4路由命中公共文件夹而不是视图文件夹

时间:2014-06-23 06:49:08

标签: php apache laravel laravel-4

我是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/home http://testapp.dev:88/about

,我会收到404

我检查了apache日志并发现了这些错误:

  

[error] [client 127.0.0.1]文件不存在:   C:/ TMP / Git_Repository /网站/ testapp /公共/约

     

[error] [client 127.0.0.1]文件不存在:   C:/ tmp目录/ Git_Repository /网站/ testapp /公/家庭

有关为何发生这种情况的任何想法?

注意:我正在使用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> 

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您的home文件中没有声明routes.php路线,无论如何,您可以尝试这样做:

<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并重试。

答案 1 :(得分:0)

使用Apache,如果Laravel(或任何其他应用程序)似乎将URL映射到目录结构而不是定义的路由,原因很可能是缺失或非活动的重写规则。

首先确保您的公共目录中有.htaccess令人不寒而栗的东西like this

<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和重写模块,它只是开箱即用。