2010-11-28 4 views
1

à la recherche d'un plus userfriendly URL, comment puis-je réaliser les deux éléments suivants, en utilisant élégamment seulement .htaccess?URL Embellissement utilisant .htaccess

/de/somepage
va /somepage?ln=de

/zh-CN/somepage # 7
va /somepage?ln=zh-CN#7

Résumé:
/[langue]/[pagefilenameWithoutExtension ] [numéro d'ancrage optionnel] [nombre compris entre 0 et 9]

devrait charger (sans changer url)
/[pagefilenameWithoutExtension] Dans = [langue] [# option d'ancrage] [un numéro de 0-9]

UPDATE, après solution fourni: 1. exception/zh-CN/somepage doit être accessible en/cn/somepage 2. php généré miniatures DonT maintenant charger plus comme:
img src = "imgcpu src = someimage.jpg & w = 25 & h = 25 & c = f & f = bw "

+0

Sachez que vous ne recevrez pas la composante n ° 7 de cette URL dans votre script. La section d'un URI après le hachage est un élément côté client uniquement et n'est pas transmise au serveur. – Orbling

Répondre

3
RewriteRule ^([a-z][a-z](-[A-Z][A-Z])?)/(.*) /$3?ln=$1 [L] 

Vous n'avez pas besoin de faire quoi que ce soit pour des fragments (par exemple: #7). Ils ne sont pas envoyés au serveur. Ils sont entièrement gérés par le navigateur.

Mise à jour: Si vous vraiment voulez traiter zh-CN comme un cas particulier, vous pourriez faire quelque chose comme:

RewriteRule ^zh-CN/(.*) /$1?ln=zh-CN [L] 
RewriteRule ^cn/(.*) /$1?ln=zh-CN [L] 
RewriteRule ^([a-z][a-z])/(.*) /$2?ln=$1 [L] 
+0

mon dieu votre mon héros! fonctionne bien, sauf que les images ne se chargent pas (theyr généré avec php imgcpu? src = aster_pfl/ad_aquahome_advertisement.jpg & w = 234 & h = 160 & c = f & f = bw – Sam

+0

Je ne peux pas vraiment déchiffrer votre commentaire, mais je suppose que vous rencontrez des problèmes avec les images car elles utilisent des URL relatives.Cette réécriture utilise une redirection interne (vers le serveur), de sorte que le navigateur ne connaît que l'URL "jolie".C'est bien parce que l'utilisateur ne voit que la jolie URL, mais cela signifie aussi que les URL relatives sont résolues par rapport à la jolie URL. Par exemple: 'src =" images/baz.jpg "' amènera le navigateur à chercher '/ de/somepage/images/baz.jpg'. –

+0

Vous pouvez soit ajouter une réécriture supplémentaire pour attraper ces cas avant la réécriture mentionnée ci-dessus, rendre vos URL d'image "moins relatives" (par exemple: 'src ="/images/baz.jpg "- notez la barre oblique ou utilisez le HTML '' tag pour dire au navigateur à quelle URL il devrait résoudre les liens relatifs par rapport à –

0

Je suggérerais st ce qui suit -

RewriteEngine on 
RewriteRule ^([a-z][a-z])/([a-zA-Z]+) /$2?ln=$1 
RewriteRule ^([a-z][a-z])/([a-zA-Z]+#([0-9])+) /$2?ln=$1$3 

La première règle prend en charge les URL comme/de/somepage. La langue doit contenir exactement deux caractères et ne doit contenir que de a à z caractères.

La deuxième règle prend en charge les URL comme/uk/somepage # 7.

+0

Notez que vous n'avez pas besoin de la partie hash (#), c'est-à-dire une fonction URI côté client et n'est jamais envoyée au serveur. – Orbling

+0

Deux héros dans une heure. Pourquoi ne puis-je mettre un V sur les deux noms puisque vos deux réponses sont correctes! – Sam

+0

J'ai spécifié le problème avec la seule exception, étant zh-CN, peut-il y avoir une règle spécifique pour traiter ce zh-CN et le rendre/cn/tous les autres sont deux lettres minuscules. – Sam