2012-01-09 3 views
3

Je l'avais déjà vu où une règle était utilisée pour convertir des répertoires sur une URL en requêtes de requêtes clé = valeur.Réécriture .htaccess pour convertir les répertoires en/key/value/key/value

Je n'ai aucune idée de comment faire cela, donc je peux avoir plus d'une de ces paires.

Par exemple:

http://www.example.com/mykey/myvalue/mykey2/myvalue2 

tracerait à:

http://www.example.com?mykey=myvalue&mykey2=myvalue2 

Merci.

Répondre

6

Utilisez ce code .htaccess pour avoir la traduction à base de récursion de key/value URI basé:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)(/.*)?$ $3?$1=$2 [N,QSA] 
RewriteRule ^(/[^/]+|[^/]+/|/?)$ /index.php [L,QSA] 

L'utilisation de ces règles une URL de http://localhost/n1/v1/n2/v2/n3/v3/n4/v4 sera INTÉRIEUREMENT redirigée à http://localhost/?n4=v4&n3=v3&n2=v2&n1=v1 traiter chaque paire de segments d'URL séparés par/en paire nom-valeur pour QUERY_STRING. MAIS gardez à l'esprit si URI n'a pas le nombre pair de segments, par exemple: http://localhost/n1/v1/n2/ puis il sera redirigé vers http://localhost/?n1=v1, en rejetant extra n2.

+0

Comment pouvez-vous faire cela pour que vous avez besoin d'une autre partie de l'URL avant que cette règle est appliquée, par exemple 'http: // localhost/rewrite/n1/v1/n2/v2 /' –

+1

En utilisant 'RewriteRule^(réécrire)/([^ /] *)/([^ /] *) (/.*)? $/$ 1/$ 4? $ ​​2 = $ 3 [L, QSA, NC] ' – anubhava

+0

Sera-ce la seule ligne que je dois inclure? Ce serait donc 'RewriteEngine On RewriteRule^(données)/([^ /] *)/([^ /] *) (/.*)? $ /datahandler.php/$1/$4?$2=$3 [L , QSA, NC] '? –

0

L'utilisation la plus courante que j'ai vu de ce type de modèle est dans le Zend Framework, mais je crois que cela est réalisé par le contrôleur frontal, c'est-à-dire le code PHP. Il n'y a, je crois, aucun moyen de faire correspondre un nombre inconnu de matches via mod_rewrite. C'est-à-dire si vous savez qu'il y aura un maximum de 3 paires dites, vous pouvez utiliser ...

RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?$1=$2 [QSA,L] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?$1=$2&$3=$4 [QSA,L] 
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?$1=$2&$3=$4&$5=$6 [QSA,L] 

... mais s'il n'y a pas de maximum connu, il ne peut pas être fait.

Questions connexes