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.

Était-ce utile?

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

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