Как заменить «тире» на «подчеркивание» в правиле IIRF? - PullRequest
0 голосов
/ 11 июня 2010

У меня есть веб-приложение, которое обслуживает изображения на основе субдомена.

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

Вместо того, что у нас было: http://www.reallylongdomainname.com/users/{username}/images/myimage.jpg

Это делает URL короче и менее «отслеживаемым».

Итак, я настроил файл .ini IIRF для перезаписи 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]

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

1 Ответ

1 голос
/ 11 июня 2010

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

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

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

...