Question

Je voulais définir .htaccess pour réécrire:

example.com/bla/info/

à

example.com/info/index.php?q=bla

example.com/bla/info/txt/

à

example.com/info/index.php?q=bla&t=txt

Je voulais que le navigateur affiche toujours:

example.com/bla/info/txt/

Je ne voulais pas réécrire dans les réécritures de niveau 2, comme:

example.com/bla/xxx/ 

ou

example.com/ccc/zzz/aaa/

mais

example.com/silly/info/ 

fonctionnerait aussi bien que

example.com/strange/info/mytxt/

Cela at-il un sens?

Avez-vous de l'aide?

Était-ce utile?

La solution

Si vous commencez votre motif avec ^ et que vous le terminez avec $, la règle ne s'appliquera que si la chaîne entière correspond.

RewriteRule   ^/bla/info/$      /info/index.php?q=bla
RewriteRule   ^/bla/info/txt/$  /info/index.php?q=bla&t=txt

Si vous n'utilisez pas l'option [R], l'URL affichée dans le navigateur sera celle que l'utilisateur a saisie.

Essayez-vous de rendre cela polyvalent? Si tel est le cas, vous pouvez utiliser la correspondance de type regex et la substitution de variable. Pour que "bla" corresponde à n'importe quelle chaîne jusqu'à la prochaine barre oblique (/), utilisez

([^/]+)

dans votre modèle et faites référence à $ 1 dans votre substitution.

RewriteRule ^/([^/]+)/info/$          /info/index.php?q=$1
RewriteRule ^/([^/]+)/info/([^/]+)/$  /info/index.php?q=$1&t=$2

Je recommande les pages Web Apache sur mod_rewrite pour plus d'informations. .

[Modifier. Correction des règles pour ne pas inclure le nom d'hôte dans le motif, comme l'a montré l'affiche originale.]

-
bmb

Autres conseils

vous m'avez mis sur la bonne voie.

j'ai fini avec quelque chose comme ceci:

RewriteRule ^([^/\.]+)/info/?$ example/info/index.php?q=$1 [L]

merci beaucoup

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