2009-09-12 7 views
1

J'ai beaucoup de règles plus simples qui fonctionnent sur ce site, donc je sais que mod_rewrite fonctionne. Je ne peux pas comprendre comment créer une règle pour cette situation. J'utilise Joomla CMS et un composant en particulier génère des URL terribles qui dupliquent d'autres (jolies) URL sur le site. Il y a un modèle cohérent pour que je puisse réécrire les URL, mais c'est loin d'être mon domaine d'utilisation des expressions régulières.Règle de réécriture complexe requise pour le fichier .htaccess

Les mauvaises URL ressemblent à ceci:

/component/content/article/111-category-name/111-article-name.html?directory=2 

(les parties « 111 » sont les limaces générés pour donner des identifiants uniques à la partie de la catégorie et l'article de l'URL, de sorte que ces chiffres sont uniques par URL, et les directory=2 change en fonction du numéro d'identification du répertoire en cours d'utilisation)

les bonnes adresses URL (déjà sur le site, généré par le noyau Joomla SEF) ressembler à ceci:

/category-name/article-name.html 

Je sais que je dois détecter les mauvaises URL, puis réécrire pour supprimer ces ID de slug et la chaîne de requête de fin. J'ai essayé pendant un temps embarrassant de m'y mettre et je ne pense même pas être proche de moi.

Ma gratitude éternelle à un gourou de mod_rewrite/expressions régulières qui peut le décomposer pour moi. Merci! -Kelly

Répondre

1

Essayez cette règle:

RewriteRule ^component/content/article/[0-9]+-([^/]+)/[0-9]+-([^/]+\.html)$ /$1/$2? [L,R=301] 

La chaîne de requête vide dans le remplacement enlèverez la chaîne de requête d'origine si elle est présente. Et le drapeau R=301 provoquera une redirection externe permanente.

+0

Merci Gumbo! Cela a fonctionné pour moi. – KellyRued

2

En supposant que cela se passe dans votre .htaccess local.

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L] 

Si cela va dans votre httpd.conf je crois qu'il est un changement mineur:

RewriteRule ^/component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L] 

mais je ne suis pas sûr à 100% parce que je fais rarement de cette façon.

Vous pouvez en option ajouter la chaîne de requête à l'URL résultante:

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L,QSA] 
+0

Oui, j'utilise le fichier .htaccess dans la racine du site. J'ai essayé d'ajouter votre première suggestion de règle sans le premier/et cela n'a aucun effet sur les URLs. Une idée de ce que le problème peut être? Merci pour votre aide jusqu'à maintenant. – KellyRued

Questions connexes