2010-06-11 7 views
0

У меня есть веб-приложение, которое служит изображениям, основанным на субдомене.Как заменить «тире» на «подчеркивание» в правиле IIRF?

Мы хотели предоставить нашим пользователям с URL, как это: http://{username}.domain.com/images/myimage.jpg

Вместо того, что мы привыкли иметь: http://www.reallylongdomainname.com/users/{username}/images/myimage.jpg

Это делает URL короче и меньше «snoopable».

Итак, я создал файл IIRI .IIR, чтобы выполнить перерисовку URL, и он отлично работает, за исключением того факта, что некоторые из наших папок пользователей имеют знак подчеркивания. И из того, что я прочитал, подчеркивание не является допустимым символом в доменном имени (хотя IIS поддерживает его).

Я хочу знать, как я мог бы сделать найти и заменить в ссылке $1 обратно, так что URL, как это:

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

Может быть переписан так:

/users/some_user/..

Вот мое правило IIRF.

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

Спасибо за любую помощь.

+0

У любого пользователя есть тире в имени пользователя (так что правильный переписанный URL-адрес должен быть/users/some-user /)? – pkaeding

+0

Нет, они этого не делают. Я имею дело с унаследованной системой, которая имеет четко определенную структуру каталогов. – jessegavin

ответ

1

Если вы знаете, что это не более чем х тире в имени пользователя:

# 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] 

Это не красиво, но это работает.

+0

Работает для моей ситуации. Спасибо. – jessegavin