在Fat Free Framework中使用mod_rewrite的简单问题

ian*_*ian 6 php .htaccess mod-rewrite fat-free-framework

我正在尝试设置和学习PHP的Fat Free Framework. http://fatfree.sourceforge.net/

设置相当简单,我在使用MAMP的机器上运行它.

我能够让'hello world'示例只运行fin:

require_once 'path/to/F3.php';
F3::route('GET /','home');
    function home() {
        echo 'Hello, world!';
    }
F3::run();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试添加第二部分时,它有两条路线:

require_once'F3/F3.php';

F3::route('GET /','home');
function home() {
    echo 'Hello, world!';
}

F3::route('GET /about','about');
function about()
{
    echo 'About Us.';
}

F3::run();
Run Code Online (Sandbox Code Playgroud)

如果我尝试第二个URL,我会收到404错误:/ about

不确定为什么其中一个mod_rewrite命令工作而不是另一个命令.

以下是我的.htaccess档案:

# Enable rewrite engine and route requests to framework
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]

# Disable ETags
Header Unset ETag
FileETag none

# Default expires header if none specified (stay in browser cache for 7 days)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A604800
</IfModule>
Run Code Online (Sandbox Code Playgroud)

小智 11

所以我的朋友实际上帮我解决了这个问题.我遇到了完全相同的问题,但基本上我也在使用MAMP,并且fatfree在MAMP的htdocs中的所有我的Fat Free文件都在dir中.

解决方案是你需要修改RewriteBase指向/[dirname]/而不是只是/然后RewriteRule改为/[dirname]/index.php.

我的.htaccess看起来像这样:

RewriteEngine On
RewriteBase /fatfree/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /fatfree/index.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)

在设置之后,您可以完全按照Fat Free文档中的示例进行操作,它将像魅力一样工作.这困扰了我一段时间,这就是它所需要的一切.此外,如果您正在使用MAMP,请编辑该httpd.conf文件/Applications/MAMP/conf/apache并确保更改以下内容:

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory>
Run Code Online (Sandbox Code Playgroud)

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)

基本上None改为All.