2010-06-11 3 views
0

J'ai une application web qui sert des images basées sur le sous-domaine.Comment remplacer 'dash' par 'underscore' dans une règle IIRF?

Nous voulions fournir à nos utilisateurs une URL comme ceci: http://{username}.domain.com/images/myimage.jpg

Au lieu de ce que nous avions: http://www.reallylongdomainname.com/users/{username}/images/myimage.jpg

Cela rend l'URL plus courte et moins « snoopable ».

Donc, j'ai mis en place un fichier IIRF .ini pour faire de la réécriture d'url et cela fonctionne très bien, sauf que certains dossiers de nos utilisateurs ont un trait de soulignement. Et d'après ce que j'ai lu, underscore n'est pas un caractère valide dans un nom de domaine (même si IIS le supporte).

Je veux savoir comment je pourrais faire une recherche et de remplacement dans la référence arrière $1 de sorte qu'une URL comme ceci:

http://some-user.domain.com/...

pourrait être réécrite à ceci:

/users/some_user/..

Voici ma règle IIRF.

RewriteCond %{HTTP_HOST} ^(?!www)([^\.]+)\.domain\.com 
RewriteRule ^/(.*)$ /users/*1/$1 [L,I] 

Merci pour toute aide.

+0

Est-ce que les utilisateurs ont un tiret dans leur nom d'utilisateur (donc l'URL ré-écrite correcte devrait être/users/some-user /)? – pkaeding

+0

Non, ils ne le font pas. Je fais affaire avec un système hérité qui a une structure de répertoire bien définie. – jessegavin

Répondre

1

Si vous savez il n'y a pas plus de tirets x dans le nom d'utilisateur:

# no dash 
RewriteCond %{HTTP_HOST} ^(?!www)([^\.\-]+)\.domain\.com 
RewriteRule ^/(.*)$ /users/*1/$1 [L,I] 

# one dash 
RewriteCond %{HTTP_HOST} ^(?!www)([^\.\-]+)-([^\.\-]+)\.domain\.com 
RewriteRule ^/(.*)$ /users/*1_*2/$1 [L,I] 

# two dashes 
RewriteCond %{HTTP_HOST} ^(?!www)([^\.\-]+)-([^\.\-]+)-([^\.\-]+)\.domain\.com 
RewriteRule ^/(.*)$ /users/*1_*2_*3/$1 [L,I] 

Il est pas beau, mais il fonctionne.

+0

Fonctionne pour ma situation. Je vous remercie. – jessegavin

Questions connexes