¿Cómo los sistemas MVC donde están las URL en estas formas fuerzan todas las solicitudes a través de un solo archivo index.php?
http://www.example.com/foo/bar/baz
http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object
http://www.example.com/hey/you
EDITAR: cuando intento las siguientes reglas de reescritura me sale este error:
[error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1
[error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1
EDITAR: Oh, este es el contenido completo de /index.php. Cuando elimino las reglas de reescritura, genera '/' o '/index.php' o obtengo un 404 para cualquier otra cosa.
<?php
echo htmlspecialchars($_SERVER['REQUEST_URI']);
?>
SOLUCIONADO: agregué un / delante de index.php en la regla de reescritura y luego funcionó:
SOLUCIONADO DE NUEVO: Resulta que / solo era necesario porque estaba ejecutando 2.2.4. Cuando actualicé a 2.2.11 el / ya no era necesario.
apache-2.2
php
mod-rewrite
mvc
jmucchiello
fuente
fuente
Respuestas:
Si está utilizando Apache, use reescrituras a través de
mod_rewrite
:Esto reescribirá sus URL a »index.php? Q = foo / bar / baz« de forma transparente.
Las líneas 2. y 3. le indican al motor de reescritura que no reescriba la URL si apunta a un archivo o directorio existente. Esto es necesario para tener acceso a los archivos reales proporcionados por el servidor httpd.
fuente
El siguiente código utiliza mod_rewrite de Apache para reescribir todas las URL que no apuntan a un archivo o directorio físico que se asignará a index.php. El resultado final será:
Regla de reescritura:
Explicación:
Ambas líneas anteriores dictan que esta regla no se aplica a los archivos normales (-f) o directorios (-d).
Se puede obtener más información sobre cómo crear reglas mod_rewrite en el sitio web de Apache: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html .
fuente