在Apache 2.2上使用FatFree和PHP5.3时无法呈现简单页面

时间:2012-07-12 19:19:51

标签: php apache fat-free-framework

我正在使用Apache 2.2和PHP 5.3。我正在尝试使用Fatfree框架进行路由。我的index.php文件如下所示:

<?php
require_once 'f3/lib/base.php';

F3::route('GET /','home');
function home() {
    echo F3::render('templates/index.html');
}

F3::route('GET /@pagenum','mainlist');
function mainlist() {
    F3::set('pagenum', @pagenum);
    echo Template::serve('templates/index.html');       
}

F3::run();

?>

如果我转到“http:// localhost:8080 /”,它会正确呈现文件templates / index.html,这意味着PHP和Fatfree正在运行。但是,如果我去“http:// localhost:8080/1”,那么它不起作用。我收到以下错误:

Not Found
The requested URL /1 was not found on this server.

如果我将第一部分更改为

F3::route('GET /anotherthing','home');
function home() {
    echo F3::render('templates/index.html');
}

然后“http:// localhost:8080 / anotherthing”也不起作用。它只适用于root。有什么帮助吗?

更多信息 这是在httpd.conf中配置的

DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
Options -Indexes FollowSymLinks Includes
AllowOverride All
Order allow,deny
Allow from All
</Directory>

启用Modrewrite:

LoadModule rewrite_module modules/mod_rewrite.so

.htaccess看起来像:

RewriteEngine On
RewriteBase /fatfree/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /fatfree/index.php [L,QSA]

“/ fatfree /”base是由于另一个SO问题中的答案有类似问题。

我也试过以下.htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]

6 个答案:

答案 0 :(得分:2)

您确实需要查看服务器日志。如果您还没有启用它们,我建议您这样做。 Apache有很好的日志。如果您看到日志条目并且没有'获得500服务器错误,那么它通常不是mod_rewrite。

如果你想确保加载重写模块(在Linux上),试试这个:

  

[root @ server~] #httpd -M 2&gt;&amp; 1 | grep rewrite

它会返回一些效果:

  

rewrite_module(共享)

答案 1 :(得分:1)

启用重写引擎并将请求路由到框架

试试这个,这个修复对我有用。修改了.htaccess文件,就像下面的代码一样。

RewriteEngine On

# Some servers require you to specify the `RewriteBase` directive
# In such cases, it should be the path (relative to the document root)
# containing this .htaccess file
#
#RewriteBase /

RewriteRule ^(lib|tmp)\/|\.(ini|php)$ - [R=404]

RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [END,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

答案 2 :(得分:1)

您可以尝试使用此.htaccess:

RewriteEngine On
RewriteRule ^(app|tmp)\/|\.ini$ - [R=404]
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

答案 3 :(得分:0)

在fatfree的根目录中有config.ini文件

[globals]
DEBUG=3
UI=ui/

DEBUG = 3会让f3显示内部的所有错误,并且更改ui值非常重要,因为您需要将模板保留在ui文件夹中,因此在此配置中您需要将其更改为您自己的模板目录。

根据f3文档,静态调用约定(F3 :: xxx)已被弃用,更好的选项是调用F3的实例(如$ f3-&gt; xxx)。

还请检查与日常相关的mod_rewrite和.htaccess的HTTPD错误日志。

-

答案 4 :(得分:0)

您只需要在index.php

中使用它
$f3=require('lib/base.php');
$f3->config('config/config.ini');
$f3->config('config/routes.ini');
$f3->run();

然后在你的config.ini中:

[globals]
DEBUG=3
UI=views/

routes.ini:

[routes]
GET /=ControllerName->methodThatRenderTheView
GET /@pagenum=ControllerName->methodThatRenderTheView

渲染视图的基本控制器:

class ControllerName {
   public function methodThatRenderTheView() {
      $this->f3->set('view', 'template.htm');
   }
}

答案 5 :(得分:0)

我曾经和你有同样的问题。

httpd.conf条目中的My DocumentRoot如下所示:

<Directory />
    AllowOverride none
    Require all denied
</Directory>

使用这些.htaccess指令:

RewriteEngine On
RewriteBase /fatfree/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /fatfree/index.php [L,QSA]

与mod_rewrite一起工作正常。我有今天最新的f3和wamp。