Search code examples
php.htaccessmod-rewritefat-free-framework

Simple problem with mod_rewrite in the Fat Free Framework


I am trying to setup and learn the Fat Free Framework for PHP. http://fatfree.sourceforge.net/

It's is fairly simple to setup and I am running it on my machine using MAMP.

I was able to get the 'hello world' example running just fin:

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

But when I try to add in the second part, which has two routes:

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();

I get a 404 error if I try the second URL: /about

Not sure why one of the mod_rewrite commands would be working and not the other.

Below is my .htaccess file:

# 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>

Solution

  • So my friend actually helped me out with this issue. I ran into the exact same problem, but basically I'm using MAMP also and have all my Fat Free files within a fatfree dir within htdocs of MAMP.

    The solution is you need to mod the RewriteBase to point to /[dirname]/ instead of just / and then change RewriteRule to /[dirname]/index.php.

    My .htaccess looks like this:

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

    After that's set, you can follow the example in the Fat Free doc exactly and it'll work like a charm. This stumped me for a while and this was all it needed. Also, if you're using MAMP, edit the httpd.conf file in /Applications/MAMP/conf/apache and be sure to alter the following:

    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride None
    </Directory>
    

    to

    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride All
    </Directory>
    

    Basically change None to All.