2009-08-12 5 views
0

J'essaie de comprendre comment les redirections de .htaccess fonctionnent.Comment les redirections .htaccess fonctionnent-elles?

Disons, par exemple, mon utilisateur accède à:

www.website.com/users/bob

Comment puis-je rediriger l'utilisateur vers:

www. website.com/users.php?user=bob

+0

Il y a un flux infini de questions comme ceci ici et sur serverfault.com. Que diriez-vous de celui-ci, par exemple: http://stackoverflow.com/questions/1249368/mod-rewrite-beginner-questions – innaM

Répondre

3

Votre fichier .htaccess quelque chose comme ça ok:

# turn on the engine 
RewriteEngine On 

RewriteRule ^users/(.*)$ /users.php?user=$1 

# Pattern: 
#^ = start of URL (.htaccess doesn't get the leading "/") 
# users/ = your path 
# (.*) = capture any character, any number of times 
# $  = end of string 

# Result: 
# /users.php?user= = your path 
# $1    = the first group captured in the pattern 
+0

Vous devriez probablement également mentionner RewriteBase ci-dessus. –

+0

maintenant le $ 1 ... si je voulais ajouter une deuxième règle ici, mais au lieu de website.com/users/bob, ce serait website.com/show/whatever, et rediriger cela vers website.com/show.php ? id = peu importe. Aurais-je simplement copier cette ligne, changer les détails et mettre un 2 $ à la fin? – mrpatg

+0

Non, vous utilisez toujours $ 1 - c'est le groupe dans la règle associée. Par exemple vous pourriez avoir/users/bob/bobbinson, match /users/([^/]*)/(.*)$ alors $ 1 est bob et $ 2 est bobbinson – Greg

0

Je vous recommande de lire le technical details of mod_rewrite. Là, vous obtenez un bon aperçu du traitement interne.

Pour votre exemple spécifique, une règle appropriée peut ressembler à ceci:

RewriteRule ^users/([a-z]+)$ users.php?user=$1 

Maintenant, quand /users/bob est demandé, mod_rewrite:

    bande
  1. le préfixe contextuel par répertoire (/ si le Le fichier .htaccess se trouve dans la racine du document) à partir du chemin demandé
  2. tester le reste (users/bob) contre les motifs jusqu'à ce que l'on corresponde à
    • s'il y a des RewriteCond directives correspondantes qu'ils seraient testés trop
  3. remplacer l'URL actuelle avec la nouvelle (en remplaçant le $n et %n avec les matchs correspondants) , si le modèle correspond et que les conditions sont évaluées à
  4. ajoutez le préfixe contextuel par répertoire, si l'URL remplacée n'est pas déjà un chemin d'URL absolu (commencez par avec /) ou une URL absolue (commençant par le schéma d'URL)
Questions connexes