Pregunta

Estoy tratando de configurar y aprender el Marco de grasa libre para PHP. http://fatfree.sourceforge.net/

Es es bastante simple de configurar y estoy corriendo en mi máquina utilizando MAMP.

Yo era capaz de conseguir el ejemplo 'hola mundo' corriendo solo aleta:

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

Pero cuando intento agregar en la segunda parte, que tiene dos rutas:

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

Me sale un error 404 si intento la segunda URL: / sobre

No sé por qué uno de los comandos mod_rewrite estarían trabajando y no al contrario.

A continuación se muestra mi archivo .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>
¿Fue útil?

Solución

Así que mi amigo en realidad me ayudó con este tema. Me encontré con el mismo problema, pero en el fondo estoy usando MAMP también y tienen todos mis archivos libre de grasa dentro de un directorio htdocs fatfree dentro de MAMP.

La solución es que necesita para el mod RewriteBase a punto de /[dirname]/ en lugar de sólo / y luego cambiar a RewriteRule /[dirname]/index.php.

Mis .htaccess es similar al siguiente:

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

Después de que se ha configurado, puede seguir el ejemplo en el documento sin grasa con exactitud y que va a funcionar como un encanto. Esto me dejó perplejo por un tiempo y esto era todo lo que necesitaba. Además, si usted está utilizando MAMP, editar el archivo httpd.conf en /Applications/MAMP/conf/apache y estar seguro de alterar la siguiente:

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

a

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

Básicamente cambiar None a All.

Otros consejos

Si está ejecutando F3 bajo una subcarpeta, debe cambiar la RewriteBase en .htaccess para que coincida con la carpeta.

En su .htaccess tiene 'index.php' se necesita 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]    

lo contrario cuando se trata de reescribir / sobre / buscará /about/index.php en lugar de sólo la raíz /index.php


Sólo tenía otro pensamiento .. que 'es' posible que mod_rewrite aunque incluya intalled puede haber un capricho con el servidor haciendo que no volver a escribir ..

Si la ruta global por debajo no funciona es posible que desee probar la reescritura

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

También puede probar una ruta global para el directorio

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

Pero eso significa anythin bajo domain.com/about/ ...... nada ... redireccionará a la función sobre ...


Una nota sobre mod_rewrite y FF

Como usted ha dicho, FF se le givikng un 404, ya que está a la espera '/' en lugar de 'index.php' ... Sin embargo, es el index.php que se espera que la diferencia ..

Para demostrar que, creo que puede duplicar su

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

como

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

y la página debe mostrar ...

La razón de esto es si sólo ir al directorio / (o /index.php) forma eitehr Apache servesx la página index.php ....

El mod_rewrite le permite redirigir el / sobre y tienen que redirigir a la index.php .. Así que si su regla de reescritura no está funcionando entonces la redirección / reescritura no sucede y obtendrá un 404 ...

Como he mencionado anteriormente, pruebe el mod_rewrite con la regla de Google .. luego tratar de ir a http://localhost:80/google si no te redirige a Google a continuación, su motor de reescritura no está funcionando ... (probablemente un problema con la configuración de Windows ..)


para activar el mod_rewrite debajo de las ventanas: Abra su http.conf Encuentra esta línea:

#LoadModule rewrite_module modules/mod_rewrite.so

quitar la marca de comentario (#) de la línea ... por lo que tiene: LoadModule rewrite_module módulos / mod_rewrite.so Guarde el archivo y reiniciar Apache ..

Alternatly .. Creo que se puede decir simplemente:

LoadModule rewrite_module modules/mod_rewrite.so

al comienzo de su archivo .htaccess ...

Me golpeó la cabeza en esto durante 2 días. Me depurado y php .htaccess ambos. El problema real es la siguiente:

Si ha copiado el archivo .htaccess de su sin grasa-1.4.4 zip descarga, no es .htaccess la .htaccess (. No se encuentra) Sólo cambiar el nombre de este archivo a .htaccess de .htaccess y todo funcione a la perfección como se menciona en el documento !!!

Estoy utilizando funciona este .htaccess para las carpetas que no sean root también

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: Si desea llamar a su archivo .htaccess algo más, se puede cambiar el nombre del archivo con el AccessFileName. Por ejemplo, si usted prefiere llamar al archivo .config entonces usted puede poner lo siguiente en el archivo de configuración del servidor:

AccessFileName .config  

aquí

Esta respuesta puede ser demasiado tarde para ti, pero tuve el mismo problema ayer.

Parece que el problema es Apache no está reescribiendo las URL. Yo tenía el mismo problema al intentar conseguir F3 que se ejecuta en OS X 10.7 - la ruta 'GET /' trabajaría pero no el 'GET /foo' como el index.php F3 estaba en un subdirectorio para localhost / F3. Mi solución fue:

  1. garantizar la .htaccess fue establecido como usted tiene.
  2. Asegúrese de mod_rewrite.so se habilitó en Apache de httpd.conf
  3. Asegúrese de establecer AllowOverride All (la mía era Ninguno) para su directorio web en httpd.conf (más abajo en el archivo).
  4. reinicio de Apache

Sin paso 3, Apache ignorará cualquier directivas de reescritura. Descubrí esto cambiando los enlaces permanentes en una instalación local de wordpress y fracasaron indicando el problema era la configuración de Apache, no F3.

Me estoy quedando esta con una pila MAMP. Me cambió el nombre de su carpeta de "sin grasa-master" a "F3". Puse esa carpeta junto a htdocs. Su archivo .htaccess (ahora dentro MAMP / F3 / lib) permanece intacto.

Mi .htaccess (en mi subcarpeta web) es madre de patrón como por su ejemplo:

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

Espero que esto ayude a alguien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top