我是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>
感谢您的帮助。
答案 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
时才会应用。为了确保它已加载,
:
在您喜欢的文本编辑器中打开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和重写模块,它只是开箱即用。