Faut savoir lire les expressions régulières. On peut te faire une explication de texte mais mettre en français une expression du type [_0-9a-zA-Z-]+, c'est un peu pénible.
2 choses primordiales à savoir :
- Apache va jouer plusieurs fois les règles jusqu'à converger sur une URL qui n'est plus modifiée par les règles. Chaque rejeu des règles est appelé "boucle" de réécriture.
- Le flag [L] arrête là la boucle de réécriture en cours. Apache recommence alors une boucle de réécriture avec en entrée la dernière URL obtenue à la réécriture, et il va une fois de plus jouer les règles pour tenter de converger vers une URL qui n'est plus réécrite.
Dans la suite, je ne détaille pas le rôle du flag L qui fait que si une règle a été activée, on repart pour un nouveau cycle depuis le début des règles.
RewriteRule ^index\.php$ - [L]
Si on demande http://tonsite.com/index.php, arrête ici le traitement des RewriteRule pour cette boucle de réécriture. Les - en 2ème paramètre dit de ne faire aucune substitution. C'est le [L] qui signifie réellement "arrête ici le traitement des RewriteRule ...".
1 2
| # uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] |
Si l'URL contient la chaîne de caractères "files/xyz" (avec xyz contenant au moins un caractère) précédée éventuellement par une chaîne contenant au moins l'un des caractères suivants : "_0-9a-zA-Z-", alors considère que l'URL est wp-includes/ms-files.php?file=xyz (xyz étant ce qui suit "files/").
1 2
| # add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] |
Pour la compréhension du premier paramètre, voir règle précédente. Cette fois-ci, l'URL réécrite est "ce qui précède éventuellement wp-admin"wp-admin/ avec redirection explicite du navigateur. Concrètement, ça va ajouter un / à la fin de l'URL qui se termine simplement par "wp-admin". On peut facilement imaginer une manière plus simple de dire la même chose 
1 2 3
| RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L] |
Si l'URL demandée correspond à un fichier existant ou un répertoire existant, alors arrête là la boucle actuelle de réécriture. C'est pour que les règles qui suivent ne soient pas exécutées si la condition d'existence du fichier ou du répertoire est vraie.
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
Si l'URL contient l'une des chaînes de caractères suivantes : "wp-content", "wp-admin" ou "wp-includes", alors considère que l'URL est juste cette chaîne de caractères. Une fois de plus, on peut dire la même chose de manière beaucoup plus simple.
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
Idem : si l'URL se termine par qqchose.php, considère que l'URL est juste ce qqchose.php.
RewriteRule . index.php [L]
Règle par défaut : si on arrive sur cette règle, considère qu'on demande index.php.
Partager