如何在IIRF规则中用'下划线'替换'破折号'?

时间:2010-06-11 18:51:12

标签: url-rewriting iirf

我有一个网络应用程序,它根据子域提供图像。

我们希望为用户提供以下网址: http://{username}.domain.com/images/myimage.jpg

而不是我们曾经拥有的: http://www.reallylongdomainname.com/users/{username}/images/myimage.jpg

这使得网址更短,更少“可窥探”。

所以我设置了一个IIRF .ini文件来进行一些url重写,除了我们的一些用户文件夹有一个下划线之外,它的效果很好。从我读过的内容来看,下划线不是域名中的有效字符(即使IIS支持它)。

我想知道如何在$1后退引用中进行查找和替换,以便这样的网址:

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

可以改写为:

/users/some_user/..

这是我的IIRF规则。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您知道用户名中的短划线不超过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]

它不漂亮,但它有效。