Question

Quelqu'un peut-il expliquer ce que fait cette règle mod_rewrite?

J'essaie de commenter le fichier, mais le code semble indiquer le contraire de ce que je pense qu'il fait

# 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]  
Était-ce utile?

La solution

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

Le $ 1 dans la deuxième partie est remplacé par le groupe dans la première partie.

Est-ce une règle de Symfony? L’idée est de transmettre la chaîne de requête entière à index.php (le contrôleur frontal) en tant que paramètre, afin que le contrôleur frontal puisse l’analyser et le router.

Autres conseils

Le navigateur envoie une demande au serveur (Apache, puisque vous utilisez mod_rewrite):

Obtenir le profil / modifier

Apache accepte cette requête et voit dans ses fichiers de configuration que vous l'avez configuré pour transmettre toutes les requêtes via mod_rewrite. Donc, il envoie la chaîne 'profile / edit' à mod_rewrite. Mod_rewrite y applique ensuite les règles que vous avez spécifiées, ce qui transforme ensuite la requête (de la manière que j’ai expliquée dans mon précédent post) en "index.php / profile / edit". Une fois que mod_rewrite est terminé, Apache continue de traiter la demande et voit «oh, ce gars demande le fichier index.php». Il appelle donc l'interpréteur php qui analyse et exécute ensuite index.php - et obtient les arguments '/ profile / edit'. Le code php (CI dans votre cas) analyse ces arguments et sait comment appeler le bon module dans votre application.

Donc, en gros, c’est une façon de toujours appeler index.php, même lorsque l’URL ne spécifie pas index.php. Ainsi, index.php fonctionne en tant que contrôleur frontal: il achemine toutes les demandes au bon emplacement dans votre application.

Si l'URL ne commence pas par index.php, ni par images, ni par css, ni par js, ni par robots.txt, la chaîne "/index.php/" est préfixé.

Comme index.php est probablement une application php exécutable, le fichier index.php peut alors lire le reste de l’URL à partir de son environnement cgi. (il est stocké dans $ {PATH_INFO})

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top