1 votes

Comment puis-je savoir ce que RewriteRule teste ?

Etant donné la règle de réécriture Apache suivante :

RewriteRule .* foo

...comment puis-je savoir précisément quelle chaîne .* est testée par rapport à ? Supposons que n'importe quel nombre de règles de réécriture arbitraires ait pu être appliqué avant ce point, et que je n'ai aucun moyen de les connaître (supposons que httpd.conf m'est caché).

EDIT : Merci, mais gardez à l'esprit que je n'ai pas d'autre choix que d'aller à l'école. no ont accès à l'édition (ou même à la lecture !) de httpd.conf. Je n'ai que des fichiers .htaccess à ma disposition.

3voto

freiheit Points 14144

EDIT : suppression de la solution qui nécessitait l'accès à httpd.conf

Cela fonctionnera, il suffit de le placer sur la ligne précédant votre règle de réécriture :

RewriteRule (.*) - [ENV=MYREWRITERULETEST:$1]

Ensuite, dans un fichier .ssi ou .cgi, vous pouvez afficher cette variable.

Les tentatives d'examen d'autres variables ne vous diront pas nécessairement à quoi correspond votre règle ; elles vous diront à quoi correspondait la règle avant l'exécution des règles de réécriture ou à quoi ressemblent les choses après l'exécution de toutes les règles de réécriture.

1voto

Jonathan Swartz Points 640

mod_rewrite utilise expressions régulières pour identifier une chaîne de caractères particulière, puis réécrit cette correspondance avec le remplacement indiqué. Dans le cas de votre exemple :

RewriteRule .* foo

mod_rewrite trouvera n'importe quel caractère (c'est ce que signifie le "."), autant de fois qu'il se répète (d'où le "*"). Maintenant, puisque "*" est un "." répétitif, cela signifie qu'il va correspondre à n'importe quelle chaîne avec n'importe quel caractère, quelle que soit sa combinaison et sa longueur. Ensuite, il va remplacer ce grand et long n'importe quoi par "foo".

Ainsi, pour utiliser mod_rewrite, vous devez avoir au moins une compréhension de base des expressions régulières, ainsi qu'une compréhension complète de ce que vous voulez faire correspondre et réécrire.

J'utilise souvent un petit programme comme Reggy o Kiki pour m'aider à mettre en page mon expression régulière. Vous trouverez peut-être cela utile également.

J'espère que cela vous aidera.

0voto

tomjedrz Points 5944

Si vous avez accès au fichier httpd.conf, voici ce que vous pouvez faire répondre décrit comment activer la journalisation pour mod_rewrite, ce qui vous donnera exactement ce que vous voulez.

Si vous avez accès au .htaccess dans le système de fichiers desservi, vous pouvez y effectuer les changements de configuration pour activer la journalisation.

Dans le cas contraire, la méthode des essais et des erreurs peut s'avérer la meilleure solution !

0voto

Shlomi Fish Points 1951

Je sais qu'il s'agit d'un en-tête dans IIS, je ne sais pas pour Apache, mais l'en-tête UNENCODED_URL ou HTTP_URL peut vous donner l'URL côté serveur si vous l'interrogez dans votre script côté serveur (ASP/PHP/quoi que ce soit).

Vous pouvez ensuite l'utiliser pour retracer la règle dans le fichier .htaccess

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X