2014-06-23 94 views
0

我是PHP/Laravel的新手,这可能很愚蠢,但我无法得到这个工作。我在我的routes.php文件中定义这两条路线:Laravel 4路线打击公共文件夹,而不是观看文件夹

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

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

如果我访问喜欢我的应用程序:http://testapp.dev:88它正确地呈现视图。不过,我得到一个404,如果我访问我的应用程序一样http://testapp.dev:88/homehttp://testapp.dev:88/about

我检查了Apache日志,发现这些错误:

[错误] [客户端127.0.0.1]文件不存在: C:/ tmp目录/ Git_Repository /网站/ testapp /公/约

[错误] [客户端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> 

感谢您的帮助。

+0

你的'public'目录中是否有Laravel'.htaccess'文件? – mkorcha

+1

看起来像'/ public'目录中的'.htaccess'文件丢失或重写规则不起作用。确保你有'.htaccess'文件:https://github.com/laravel/laravel/blob/master/public/.htaccess和'mod_rewrite'安装/启用。顺便说一句:路由的名称(如'['as'=>'home'...]'不会使'/ home'成为一个可访问的URI,它只是为了更好地引用您的应用程序,例如'URL :: route('home')'。所以你可以引用这个名字,不管实际的路由是什么样子。 – Quasdunk

+0

你还没有定义home路由,如果你不能访问关于被定义的路由,那么必须我的猜测是默认访问http:// localhost/public /约 –

回答

0

你没有宣布home路线IB您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并重试。

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 -file(位于somewehere在你Apache的安装文件夹)的文本编辑器并查找行

#LoadModule rewrite_module modules/mod_rewrite.so 

请务必在开头删除#以取消注释

在Linux(也可能是Mac)上

只要运行

$ a2enmod rewrite 

确认后重新启动Apache的,你应该是好去。

从版本5.4开始,PHP附带一个基本的内置web服务器。它不如Apache强大,并且不能重写URL,但仍有可能实现这种行为。这就是Laravel的server.php。所以,如果你不需要的Apache的全功率为您的发展envirnoment,你可以使用PHP的内置服务器Laravel的根目录下(不公开),并通过它的路由器文件:

$ php -S localhost:8000 server.php 

现在你不不必担心Apache和重写模块,它只是开箱即用。

相关问题