Simple problem with mod_rewrite in the Fat Free Framework

前端 未结 7 2441
悲哀的现实
悲哀的现实 2020-12-18 02:42

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 usi

相关标签:
7条回答
  • 2020-12-18 02:48

    If you're running F3 under a subfolder, you must change the RewriteBase in .htaccess to match the folder.

    0 讨论(0)
  • 2020-12-18 02:48

    I banged my head on this for 2 days. I debugged htaccess and php both. The actual problem is this :

    If you copied the .htaccess file from their fatfree-1.4.4 zip download, its not .htaccess its htaccess (. is missing) Just rename this file to .htaccess from htaccess and everything will work perfectly as its mentioned in the document !!!

    I am using this .htaccess works for non-root folders too

    Options -Indexes 
    IndexIgnore *    
    
    RewriteEngine On
    RewriteCond $1 !^(index\.php|images|main\.css|form\.css|favicon\.ico|robots\.txt|sitemap\.xml)
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
    0 讨论(0)
  • 2020-12-18 02:48

    This response may be too late for you but I had the same problem yesterday.

    It sounds like the problem is apache is not rewriting urls. I had the same issue when trying to get F3 running on OSX 10.7 - the 'GET /' route would work but not the 'GET /foo' as the F3 index.php was in a subdir for localhost/F3. My solution was to:

    1. ensure the .htaccess was set as you have.
    2. ensure mod_rewrite.so was enabled in apache's httpd.conf
    3. ensure that you set AllowOverride All (mine was None) for your web directory in httpd.conf (further down the file).
    4. restart apache

    Without step 3, apache will ignore any rewrite directives. I discovered this by changing the permalinks on a local wordpress install and they failed indicating the problem was the apache config, not F3.

    0 讨论(0)
  • 2020-12-18 02:55

    Note: If you want to call your .htaccess file something else, you can change the name of the file using the AccessFileName directive. For example, if you would rather call the file .config then you can put the following in your server configuration file:

    AccessFileName .config  
    

    here

    0 讨论(0)
  • 2020-12-18 03:06

    In your .htaccess you have 'index.php' it needs a slash ... '/index.php'

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

    otherwise when it tries to rewrite /about/ it will look for /about/index.php instead of just the root /index.php


    I just had another thought.. it 'is' possible that althought mod_rewrite is intalled there may be a quirk with the server causing it not to rewrite..

    If the global route below doesnt work you might want to test the rewrite

    RewriteRule ^/google http://www.google.com [L,NC];
    

    You could also try a global route for the directory

    F3::route('GET /about/*','about');
    

    but that means anythin under domain.com/about/ ...... anything ... will reroute to the about function...


    A note about mod_rewrite and FF

    As you said, FF is givikng you a 404 because it is expecting '/' instead of '/index.php'... However, it is the index.php which is expecting the difference..

    To demonstrate that, i believe you can duplicate your

    F3::route('GET /','home');
    

    as

    F3::route('GET /index.php','home');
    

    and the page should display...

    The reason for this is if you just go to the / directory (or /index.php) eitehr way apache servesx the index.php page....

    The mod_rewrite allows you to redirect the /about and have it redirect to the index.php.. So if your rewrite rule is not working then the redirect/rewrite does not happen and you will get a 404...

    As i mentioned above, test the mod_rewrite with the google rule.. then try to go to http://localhost:80/google if it does not redirect you to google then your rewrite engine is not working... (probably an issue with the windows configuration..)


    to enable mod_rewrite under windows: Open your http.conf Find this line:

    #LoadModule rewrite_module modules/mod_rewrite.so
    

    remove the comment mark (#) from the line... so you have: LoadModule rewrite_module modules/mod_rewrite.so Save the file and restart apache..

    Alternatly.. I think you can just say:

    LoadModule rewrite_module modules/mod_rewrite.so
    

    at the start of your htaccess file...

    0 讨论(0)
  • 2020-12-18 03:06

    I'm running this with a MAMP stack. I renamed their folder from "fatfree-master" to "f3". I put that folder next to htdocs. Their .htaccess file (now inside MAMP/f3/lib) remains untouched.

    My .htaccess (in my web subfolder) is stock standard as per their example:

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

    Hope this helps someone.

    0 讨论(0)
提交回复
热议问题