Pregunta

¿Puede alguien explicar qué está haciendo esta regla mod_rewrite?

Estoy tratando de comentar el archivo, pero el código parece indicar lo contrario a lo que creo que está haciendo

# Enable rewriting of URLs
RewriteEngine on


# Allow specified file types to be accessed
# Thing to test = URL
# Condition = not starting with  
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)


# RewriteRule will only be performed if the preceeding RewriteCond is fulfilled
# Remove index.php from all URLs     
# Pattern = anything (0 or more of any character)
# Substitution = index.php + the rest of the URL    
RewriteRule ^(.*)$ /index.php/$1 [L]  
¿Fue útil?

Solución

^ = begin of line
( = begin group
.* = any character, any number of times
) = end group

Los $ 1 en la segunda parte son reemplazados por el grupo en la primera parte.

¿Es esta una regla de Symfony? La idea es pasar la cadena de consulta completa al index.php (el controlador frontal) como un parámetro, para que el controlador frontal pueda analizarlo y enrutarlo.

Otros consejos

El navegador envía una solicitud al servidor (Apache, ya que está usando mod_rewrite):

GET profile / edit

Apache acepta esta solicitud y ve en sus archivos de configuración que la ha configurado para pasar todas las solicitudes a través de mod_rewrite. Por lo tanto, envía la cadena 'perfil / edición' a mod_rewrite. Mod_rewrite luego aplica las reglas que le especificaste, las cuales luego transforman la solicitud (de la manera que expliqué en mi publicación anterior) a 'index.php / profile / edit'. Después de que se realiza mod_rewrite, Apache continúa procesando la solicitud y ve 'oh, este tipo está solicitando el archivo index.php'. Así que llama al intérprete php que luego analiza y ejecuta index.php y obtiene '/ profile / edit' como argumentos. El código php (CI en su caso) analiza estos argumentos y sabe cómo llamar al módulo correcto en su aplicación.

Básicamente, es una forma de llamar siempre index.php, incluso cuando la url no especifica index.php. De esa manera, index.php funciona como el controlador frontal: dirige todas las solicitudes a la ubicación correcta en su aplicación.

Si la URL no comienza con index.php o images o css o js o robots.txt, la cadena " /index.php/" está prefijado.

Como index.php es probablemente una aplicación php ejecutable, index.php puede leer el resto de la URL desde su entorno cgi. (Se almacena en $ {PATH_INFO})

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