2009-05-25 21 views
1

Ugh .. mod_rewrite me fait me sentir stupide. Je n'ai tout simplement pas encore enveloppé mon cerveau. :/Aide avec la règle mod_rewrite pour l'URL dynamique

Je l'adresse suivante:

http://example.com/a/name/

... que je tiens à souligner ici:

http://example.com/a/index.php?id=name

... où name est ce qui se passait à index.php comme argument id.

Tout ce que j'ai essayé des résultats soit dans un 404 ou un 500 .. :(

Répondre

1

pour vous commencer:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !index.php 
RewriteRule ^/?a/([^/]+)/?$ /a/index.php?id=$1 [QSA,L] 

Si un tutoriel de réécriture ne fonctionne pas pour vous, try another.

Edit: exclus index.php selon la suggestion de Gumbo

+0

Résultats en erreur 500 avec ceci: demande a dépassé la limite de 10 réoriente internes en raison d'une erreur de configuration probable. – Ian

+0

Ah, c'est juste parce qu'il essaie de réécrire l'URL réécrite .. si je commence à partir, disons^/? Aa/alors ça marche bien. Merci! – Ian

+1

@Ian Vous devez exclure le fichier dans lequel vous réécrivez la requête. – Gumbo

1

Peut-être que quelque chose le long des lignes de

 
RewriteEngine on 
RewriteBase /a/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/?$ index.php?id=$1 [L,QSA] 

ferait l'affaire.

1

Je vous suggère de jeter un oeil à l'adresse suivante:

http://www.dracos.co.uk/code/apache-rewrite-problem/

Les solutions présentées fonctionnent, mais il y a des mises en garde expliquées dans l'URL, principalement en ce qui concerne? et # dans les URL elles-mêmes.

2

Si vous souhaitez que la barre oblique finale soit facultative, vous devez exclure le fichier pour lequel vous réécrivez la requête. Sinon, vous aurez une belle récursion infinie.

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/a/index\.php$ 
RewriteRule ^/a/([^/]+)/?$ /a/index.php?id=$1 [L] 

Voici toute demande qui commence par /a/… mais elle ne /a/index.php est réécrite à /a/index.php.

Mais si le slash est obligatoire, il n'y a pas besoin d'exclure le fichier de destination:

RewriteEngine on 
RewriteRule ^/a/([^/]+)/$ /a/index.php?id=$1 [L]