3

我正在使用 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”也不起作用。它只适用于根。有什么帮助吗?

MORE INFO 这是在 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 question 中的答案。

我还尝试了以下.htaccess:

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

6 回答 6

2

您确实需要查看您的服务器日志。如果您尚未启用它们,我建议您这样做。Apache 有非常好的日志。如果您看到日志条目并且没有收到 500 服务器错误,则通常不是 mod_rewrite。

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

[root@server ~]# httpd -M 2>&1|grep 重写

它将返回一些结果:

rewrite_module(共享)

于 2012-08-24T22:33:34.640 回答
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]
于 2014-12-09T13:06:32.817 回答
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]
于 2020-11-26T11:20:01.450 回答
0

我以前和你有同样的问题。

我在 httpd.conf 条目中的 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。

于 2014-08-14T01:48:13.257 回答
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/

路线.ini:

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

渲染视图的基本控制器:

class ControllerName {
   public function methodThatRenderTheView() {
      $this->f3->set('view', 'template.htm');
   }
}
于 2013-06-25T12:48:14.367 回答
0

fatfree的根目录下有config.ini文件

[globals]
DEBUG=3
UI=ui/

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

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

还请检查 HTTPD 错误日志以了解与 mod_rewrite 和 .htaccess 相关的问题。

--

于 2013-06-21T17:16:10.677 回答