2011-01-02 15 views
6

Sto provando a configurare e imparare Fat Free Framework per PHP. http://fatfree.sourceforge.net/Semplice problema con mod_rewrite in Fat Free Framework

È abbastanza semplice da configurare e lo sto eseguendo sul mio computer 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 certo perché uno dei comandi mod_rewrite starebbero lavorando e non il contrario.

Qui di seguito è il mio .htaccess di 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> 
+0

Hai funzionato FF? – CarpeNoctumDC

+0

@DC Nessuna fortuna, non sono sicuro nemmeno dove cercare di sistemarlo. – ian

+0

Nuovo sito Fat-Free: http://bcosca.github.com/fatfree/ – stillstanding

risposta

11

Quindi il mio amico in realtà mi ha aiutato con questo problema. Mi sono imbattuto nello stesso identico problema, ma fondamentalmente sto usando anche MAMP e ho tutti i miei file Fat Free all'interno di una directory fatfree all'interno di htdocs di MAMP.

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

mio .htaccess si presenta così:

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 grasso doc libero esattamente e che funzionerà come un fascino. Questo mi ha bloccato per un po 'e questo era tutto ciò di cui 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> 

cambiano Fondamentalmente None-All.

+1

Grazie ho provato tutto ciò ma ancora senza fortuna. '/' Funziona ma non '/ anything' – ian

+0

ha fatto il trucco per me. Grazie mille. [code] RewriteEngine On RewriteBase/FatFree/ RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {} REQUEST_FILENAME! -d RewriteRule. */FatFree /index.php [L, QSA] [/ code] [code] require_once '/app/fatfree-2.0.0/lib/base.php'; F3 :: percorso ('GET /', 'hom e '); \t funzione home() { \t \t echo 'Ciao, mondo!'; \t} F3 :: run(); [/ code] – Justin

+0

grazie non sono riuscito a farlo funzionare spostandomi su un altro framework – Geomorillo

1

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 prova a riscrivere/about/cercherà /about/index.php invece della semplice /index.php


Ho appena avuto un altro pensiero .. è 'possibile che anche se mod_rewrite è intallato ci può essere una stranezza con il server che causa di non riscrivere ..

Se il percorso globale di seguito non funziona si potrebbe voler testare il riscrivere

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

Si potrebbe anche provare un percorso globale per la directory

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

ma che significa anythin sotto domain.com/about/ ...... niente ... sarà rerou TE alla funzione di circa ...


Una nota su mod_rewrite e FF

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

Per dimostrare che, credo che si può duplicare il vostro

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

come

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

e la pagina deve visualizzare ...

La ragione di questo è se basta andare alla/directory (o /index.php) eitehr modo 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 detto sopra, prova il mod_rewrite con la regola di google .. quindi prova ad andare a http://localhost:80/google se non ti reindirizza a google allora il tuo motore di riscrittura non funziona ... (probabilmente un problema con la configurazione di windows ..)


per abilitare mod_rewrite sotto le finestre: Aprire il 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/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 ...

+0

Questo è quello che ho pensato, ma cambiarlo non ha funzionato. – ian

+0

Qual è l'indirizzo che stai utilizzando per accedere? dominio.com/about/index.php o dominio.com/about o? – CarpeNoctumDC

+0

è anche il tuo esatto file htaccess o stai usando ? – CarpeNoctumDC

2

Se si esegue F3 in una sottocartella, è necessario modificare il RewriteBase in .htaccess in modo che corrisponda alla cartella.

1

Ho sbattuto la testa su questo per 2 giorni. Ho eseguito il debug di 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 sua .htaccess basta rinominare il file .htaccess da (manca.) htaccess e tutto funzionerà perfettamente come menzionato nel documento !!!

Sto usando questo .htaccess funziona 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] 
+0

Sto usando MAMP e non puoi avviare i nomi dei file con '.' su Mac OS, ho provato il tuo .htaccess ma senza fortuna. – ian

+0

quindi, sei in grado di usare .htaccess o no? senza accesso questa cosa non funzionerà. Inoltre non ha mai funzionato su Mac quindi non può davvero aiutare qui :( – shikhar

+0

Apri Terminale, cd nella directory con htaccess in e digita mv htaccess .htaccess – Rikki

0

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

Sembra che il problema è che Apache non sta riscrivendo gli URL. Ho avuto lo stesso problema quando provavo a far funzionare F3 su OSX 10.7 - il percorso "GET /" funzionava ma non lo 'GET /foo' come l'indice F3 index.php era in una sottodirectory per localhost/F3. La mia soluzione era:

  1. assicurarsi che il .htaccess sia impostato come avete.
  2. garantire in mod_rewrite.so è stato abilitato httpd.conf di Apache
  3. Assicurarsi di impostare AllowOverrideAll (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. L'ho scoperto cambiando i permalink su una installazione di wordpress locale e non sono riusciti a indicare che il problema era la configurazione di apache, non F3.

1

Nota: se si desidera chiamare il proprio file .htaccess, è 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 

here

0

Io corro questo con uno stack MAMP. Ho rinominato la cartella da "fatfree-master" a "f3". Metto quella cartella accanto a htdocs. Il loro file .htaccess (ora all'interno di MAMP/f3/lib) rimane intatto.

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 aiuti qualcuno.

+0

Non è chiaro, almeno per me, come questo si riferisce alla domanda. Potresti per favore elaborare? –

+0

@Alex Risponderò solo una volta. Ho trovato questo post perché stavo avendo problemi a far funzionare il campione, come spiegato in modo imbarazzante (anche se potrebbe essere stato utile se avessero incluso i tag, ma il mio cattivo). Successivamente, nella loro guida, non è sempre chiaro a quale file .htaccess si riferiscono. Quindi ho chiarito anche questo. Alla fine non hanno offerto alcuna istruzione specifica MAMP/XAMP. Quindi ho ritenuto pertinente e forse utile consigliare come ho implementato il loro framework. – MannyC