2009-04-02 5 views
2

Quelle est la meilleure façon de convertir ces demandes:Utiliser mod_rewrite pour convertir les dossiers à querystring

http://www.example.com/en/ 
http://www.example.com/en/index.php 

À:

http://www.example.com/index.php?language_id=en 

Il y a différents fichiers PHP, la règle devrait également la carte

http://www.example.com/en/anyfile.php 

Pour:

http://www.example.com/anyfile.php?language_id=en 

L'ID de langue peut être n'importe quel code à deux lettres (il est vérifié dans le script PHP, pour s'assurer qu'il est valide).

Vraisemblablement, j'aurai besoin d'utiliser .htaccess, et tout conseil sur la façon de mettre en œuvre ce qui précède serait grandement apprécié. Merci.

Mise à jour

Ce qui suit a fonctionné pour moi.

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ([a-z]+)/(css|js|images)/(.+) /$2/$3 [L] 
    RewriteRule ([a-z]+)/(.+).php /$2.php?language_id=$1 [QSA,L] 
    RewriteRule ([a-z]+)/$ /index.php?language_id=$1 [QSA,L] 
</IfModule> 

Cette demande également réachemine au css, js et images dossiers arrière dans le dossier racine. Cela fonctionne également si aucun nom de fichier n'est entré, redirigeant automatiquement vers index.php.

Répondre

2

Vous voulez probablement ajouter le drapeau QSA à vos règles de réécriture, qui ajoutera les bits addiitonal sur la chaîne de requête à la requête réécrite, par exemple

RewriteRule magic here [PT,QSA] 
+0

Merci, le drapeau QSA est ce que je cherchais :-) – Mun

+0

merci, je me demandais toujours ce que le drapeau était pour –

1
RewriteRule /([^/]+)/(.*) /$2?language_id=$1 
0

J'utilise pour construire suivant URL conviviale:

RewriteRule ^([^/]+)[/]{0,1}(.*)$ index.php?q=$2&language=$1 [L,QSA,NC] 
Questions connexes