Vous pouvez juste faire l'extension facultative dans la règle de réécriture:
RewriteEngine on
RewriteRule ^(.+)(\.htm)?$ index.php?name=$1 [NC]
Notez que c'est à peu près l'équivalent Ce qui signifie que toute URL autre que le fait d'aller directement sur www.mySite.com sera redirigée vers index.php. Si vous avez des règles plus spécifiques, elles devraient apparaître avant celle-ci.
Mise à jour: Comme je le disais, cette règle correspondra essentiellement à toutes les URL sur www.mySite.com - y compris index.php! Par conséquent, quand vous allez à www.mySite.com/this is an example
, ce qui suit se produit:
^(.+)(\.htm)?$
correspond à « ceci est un exemple »
- mod_rewrite traduit que pour /index.php?name=this est un exemple
- mod_rewrite redirige vers /index.php?name=c'est un exemple
- Après la redirection, mod_rewrite essaie à nouveau d'évaluer les règles.
^(.+)(\.htm)?$
correspond à "index.php"
- mod_rewrite traduit cela en /index.php?name=index.php, la valeur précédente démolir le nom paramètre querystring
Afin d'éviter la seconde redirection (en spécifiant [L], ou le dernier, ne fonctionne pas, car après les premières règles de redirection sont réappliquées), vous pouvez utiliser un RewriteCond pour indiquer quand redirect:
RewriteCond %{REQUEST_URI} !^index\.php
RewriteRule ^(.+)(\.htm)?$ index.php?name=$1 [NC]
Cela dit mod_rewrite à pas appliquer la règle si la demande URI (la partie de l'URL après le domaine) commence par index.php.
Vous devriez jeter un oeil aux autres conditions de réécriture que vous pouvez spécifier. Par exemple, vous ne voulez probablement pas que les utilisateurs soient redirigés s'ils broutent directement à un autre fichier php, que ce soit, vous pouvez spécifier que dans votre RewriteCond
aussi:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^index\.php
RewriteRule ^(.+)(\.htm)?$ index.php?name=$1 [NC]
qui se lit « si la demande est pas fichier et la requête n'est pas index.php, rediriger vers index.php ".
-1? se soucier de commenter? – Alex
Soit vous avez introduit un type dans votre code index.php, soit vous manquez une citation après 'name' dans' $ _GET ['nom] '... –
Php echo $ _GET [' nom ']; ?> – Alex