Domanda

sto cercando di setup e imparare il grasso quadro libero per PHP. http://fatfree.sourceforge.net/

E 'è abbastanza semplice da installare e sono in esecuzione sulla mia macchina utilizzando MAMP.

sono stato in grado di ottenere l'esempio 'ciao mondo' esecuzione solo pinna:

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

Ma quando provo ad aggiungere nella seconda parte, che ha due percorsi:

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

ottengo un errore 404 se provo il secondo URL: / about

Non capisco perché uno dei comandi mod_rewrite starebbero lavorando e non il contrario.

Di seguito è riportato il mio file .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>
È stato utile?

Soluzione

Quindi il mio amico in realtà mi ha aiutato con questo problema. Ho incontrato lo stesso problema, ma in fondo sto usando MAMP anche e hanno tutti i miei file Fat gratuita nel raggio di un dir fatfree entro htdocs di MAMP.

La soluzione è che devi mod il RewriteBase al punto da /[dirname]/ invece di / e quindi modificare RewriteRule a /[dirname]/index.php.

I miei .htaccess aspetto:

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

Dopo che è impostato, è possibile seguire l'esempio nel doc Fat Free esattamente e che funzionerà come un fascino. Questo mi ha sconcertato per un po 'e questo era tutto quello che aveva bisogno. Inoltre, se si sta utilizzando MAMP, modificare il file httpd.conf in /Applications/MAMP/conf/apache ed essere sicuri di modificare il seguente:

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

a

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

In sostanza cambia None a All.

Altri suggerimenti

Se si sta eseguendo F3 in una sottocartella, è necessario modificare il RewriteBase in .htaccess per abbinare la cartella.

Nel vostro .htaccess avete 'index.php' ha bisogno di una barra ... '/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]    

altrimenti quando si tenta di riscrivere / su / cercherà /about/index.php anziché solo la radice index.php


Ho appena avuto un altro pensiero .. E 'è' possibile che mod_rewrite ma decorate intalled ci può essere un capriccio con il server causando non riscrivere ..

Se il percorso globale al di sotto non funziona si potrebbe desiderare di provare la riscrittura

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

Si potrebbe anche provare un percorso globale per la directory

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

Ma questo significa anythin sotto domain.com/about/ ...... niente ... sarà reindirizzare alla funzione su ...


Una nota su mod_rewrite e FF

Come hai detto, FF è givikng una 404, perché si aspetta '/' invece di 'index.php' ... Comunque, è l'index.php che si aspetta la differenza ..

Per dimostrare che, io credo che si possa duplicare il vostro

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

come

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

e la pagina dovrebbe visualizzare ...

La ragione di questo è che se basta andare nella directory / (o /index.php) modo eitehr apache servesx pagina index.php ....

Il mod_rewrite consente di reindirizzare l'/ su e lo hanno reindirizzare alla index.php .. Quindi se la vostra regola di riscrittura non funziona allora il reindirizzamento / riscrittura non accade e si otterrà un 404 ...

Come ho già detto, testare il mod_rewrite con la regola google .. poi cercare di andare a http://localhost:80/google se non ti reindirizza a google allora il vostro motore di riscrittura non funziona ... (probabilmente un problema con la configurazione di Windows ..)


per abilitare mod_rewrite sotto le finestre: Apri il tuo http.conf Trova questa riga:

#LoadModule rewrite_module modules/mod_rewrite.so

rimuovere il segno di commento (#) dalla linea ... in modo da avere: LoadModule rewrite_module moduli / mod_rewrite.so Salvare il file e riavviare apache ..

a turni .. Credo che si può solo dire:

LoadModule rewrite_module modules/mod_rewrite.so

all'inizio del file .htaccess ...

Ho sbattuto la testa su questo per 2 giorni. Ho il debug .htaccess e php entrambi. Il vero problema è questo:

Se è stato copiato il file .htaccess dalla loro FatFree-1.4.4 zip download, la sua non è .htaccess la sua .htaccess (. Manca) basta rinominare questo file .htaccess da .htaccess e tutto funziona perfettamente come indicato nel documento !!!

Sto usando questo opere .htaccess per le cartelle non-root troppo

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]

Nota: Se si desidera chiamare il file .htaccess qualcosa d'altro, è possibile modificare il nome del file utilizzando la direttiva AccessFileName. Ad esempio, se si preferisce chiamare il file config allora si può mettere il seguente nel file di configurazione del server:

AccessFileName .config  

qui

Questa risposta potrebbe essere troppo tardi per voi, ma ho avuto lo stesso problema di ieri.

Sembra che il problema è Apache non è la riscrittura degli URL. Ho avuto lo stesso problema quando si cerca di ottenere F3 in esecuzione su OSX 10.7 - il percorso 'GET /' avrebbe funzionato, ma non il 'GET /foo' come index.php F3 trovavo in una sottocartella per localhost / F3. La mia soluzione era quella di:

  1. garantire la .htaccess è stato impostato come avete.
  2. Accertarsi mod_rewrite.so è stato abilitato apache di httpd.conf
  3. Assicurarsi di impostare AllowOverride All (la mia era None) della directory web in httpd.conf (più in basso il file).
  4. Riavviare Apache

Senza punto 3, apache ignora le direttive di riscrittura. Ho scoperto questo cambiando i permalink wordpress su una installazione locale e non sono riusciti a indicare il problema era la configurazione di apache, non F3.

Io corro questo con uno stack MAMP. Ho rinominato loro cartella da "FatFree-master" a "F3". Ho messo la cartella htdocs accanto. La loro file .htaccess (ora all'interno MAMP / F3 / lib) rimane intatta.

Il mio .htaccess (nel mio web sottocartella) è madre standard come per il loro esempio:

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

Spero che questo aiuta qualcuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top