mod_rewrite question règle variables de redirection
-
06-07-2019 - |
Question
Je suis un peu un .htaccess n00b et je ne peux pas, pour la vie, obtenir une poignée d'expressions régulières.
J'ai le code RewriteRule
suivant qui fonctionne très bien:
RewriteRule ^logo/?$ /pages/logo.html
En gros, il faut /pages/logo.html
pour en faire un / logo
.
Puis-je généraliser ce code avec des variables pour qu'il fonctionne automatiquement sans qu'il soit nécessaire de disposer d'une ligne indépendante pour chaque page?
Je sais que $ 1
peut fonctionner en tant que variable, mais c'est généralement le cas pour les requêtes et je ne parviens pas à le faire fonctionner dans cet exemple.
La solution
Vous devez d’abord savoir que mod_rewrite ne peut gérer que les requêtes adressées au serveur. Il vous faudra donc demander à / logo
de le réécrire en /pages/logo.html
. Et c’est ce que fait la règle: elle réécrit les demandes avec le chemin d’URL / logo
en interne vers /pages/logo.html
et non l’inverse.
Si vous souhaitez maintenant utiliser des parties de la chaîne correspondante, vous devez utiliser des groupes pour les regrouper ( (
expr
)
) que vous pouvez ensuite référencer avec $
n
. Dans votre cas, le modèle [^ /]
sera approprié pour décrire tout caractère autre que la barre oblique /
:
RewriteRule ^([^/]+)$ /pages/$1.html
Autres conseils
Essayez ceci:
RewriteRule ^/pages/(.*)\.html$ /$1
Le (. *)
correspond à tout ce qui se trouve entre pages /
et .html
. Tout ce qui y correspond est utilisé dans $ 1
. Ainsi, /pages/logo.html
devient / logo
et /pages/subdir/other_page.html
deviendrait / subdir / autre_page