我正在使用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]
答案 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。