.htaccess réécrire seconde réécrire le dossier de cas 2 = info
-
05-07-2019 - |
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?
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