2010-02-23 6 views
1

J'essaie de modifier ma page Web, que j'utilise actuellement avec QueryStrings pour afficher des pages, et je souhaite que les URL de sites Web soient modifiées pour être "conviviales pour les moteurs de recherche".(récursif) Expression régulière pour le fichier .htaccess

Je suis un débutant dans les expressions régulières et également dans le fichier .htaccess, et je veux changer les URL de

http://someaddress.bla/index.php?lang=en&rootCategory=$rootCaty&leafCategory=$leafCat 

à

http://someaddress.bla/en/$rootCat/$sub-category/$sub-category2/.../$leafCat 

Catégories sont stockées récursive sur la base de données ainsi, Je dois afficher chaque niveau de catégorie dans l'URL. Mais ce dont j'ai besoin, c'est seulement la dernière catégorie dans l'url. par exemple la catégorie peut être une catégorie racine comme:

http://someaddresss.bla/en/Company 

qui est actuellement affiché à partir de l'URL:

http://someaddress.bla/?lang=en&RootCategory=Company 

ou il peut être une sous-catégorie comme:

http://someaddress.bla/en/Company/AboutUs 

qui est actuellement affiché à partir de l'URL:

http://someaddress.bla/?lang=en&RootCategory=Company&LeafCategory=AboutUs 

ou peut être une feuille comme:

http://someaddress.bla/en/Company/AboutUs/Staff/.../Steve où "Steve" est la feuille dans la récursivité. Cette page est affichée à partir de l'URL:

http://someaddress.bla/?lang=en&RootCategory=Company&LeafCategory=Steve 

Je ne pouvais pas écrire l'expression régulière pour gérer cette situation, toute aide sera appréciée. Merci!

+0

Avez-vous considéré mod_rewrite toutes les demandes 404 à un seul fichier PHP et effectuer votre regex dans ce fichier? –

+0

Je n'ai pas compris de quoi vous parlez vraiment avec "mod_rewrite toutes les requêtes 404 à un seul fichier PHP", mais j'ai plusieurs fichiers php, et je peux vérifier si le contenu est manquant ou pas avec php. Je prévois de changer l'expression régulière en "RewriteRule^/? ([^ /] +)/([^ /] +) /? $ SomeFichier.php? Lang = $ 1 & RootCategory = $ 2 RewriteRule ^/? ([^ /] +)/([^ /] +) (/.+)?/([^ /] +) /? $ someFile.php? lang = $ 1 & RootCategory = $ 2 & LeafCategory = $ 4 " où gérer les données dans someFile.php – fsonmezay

Répondre

2
RewriteRule ^/?([^/]+)/([^/]+)/?$ /?lang=$1&RootCategory=$2 
RewriteRule ^/?([^/]+)/([^/]+)(/.+)?/([^/]+)/?$ /?lang=$1&RootCategory=$2&LeafCategory=$4 
+0

merci, cela a bien fonctionné pour moi – fsonmezay

0

Vous pouvez faire correspondre le dernier élément dans l'URL par ancrage à $ (la « fin de chaîne » caractère):

([^/]+)$ 

correspondront et capturer le dernier jeu de caractères dans l'URL qui n'est pas / caractère.

Questions connexes