2009-08-12 10 views
1

J'essaie d'utiliser le fichier .htaccess suivantrépertoire htaccess pour déposer problème de redirection

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^images/ 
RewriteRule (.*) view.php?picid=$1 [L] 
RewriteRule ^/user/(.*)$ /users.php?user=$1 

Je veux deux choses à se produire: Chaque fois que quelqu'un demande /1234, il redirige vers /view.php?picid=1234, et aussi quand quelqu'un visite /users/bob , il redirige vers /users.php?user=bob.

Mon code, cependant, ne semble pas fonctionner correctement.

Répondre

1

Il y a plusieurs façons de le faire. Voici qui devrait fonctionner:

RewriteRule ^user/(.+)$ users.php?user=$1 [L] 
RewriteRule ^([0-9]+)$ view.php?picid=$1 [L] 

La première règle intercepter les demandes est chemin d'URI commence par /user/ suivi d'un ou plusieurs caractères arbitraires. Et la seconde attrapera toute requête dont le chemin de l'URI commence par / suivi d'un ou plusieurs chiffres.

0

Le problème initial avec vos règles est que le RewriteRule avec (. *) Correspondra à tout.

Si vous ne voulez pas qu'il corresponde à une URL avec une barre oblique en elle (comme les utilisateurs/bob), essayez^([^ /] *) $

En second lieu, après une URL est réécrite, la La nouvelle URL reprend vos règles. Si vous voulez éviter de faire correspondre quelque chose qui a déjà été réécrit une fois, vous devez ajouter une condition comme

RewriteCond %{REQUEST_URI} !\.php 
Questions connexes