2010-06-11 91 views
0

我有一个基于子域的图像服务。如何在IIRF规则中用'下划线'代替'短划线'?

我们希望我们的用户提供这样的网址: http://{username}.domain.com/images/myimage.jpg

取而代之的是我们曾经有过: http://www.reallylongdomainname.com/users/{username}/images/myimage.jpg

这使得URL更短,少“探听”。

因此,我设置了一个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] 

感谢您的任何帮助。

+0

是否有用户在他们的用户名中有短划线(所以正确的重写URL应该是/ users/some-user /)? – pkaeding 2010-06-11 18:54:17

+0

不,他们没有。我正在处理一个具有明确定义的目录结构的遗留系统。 – jessegavin 2010-06-11 18:58:28

回答

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] 

它不漂亮,但它的作品。

+0

适用于我的情况。谢谢。 – jessegavin 2010-11-22 23:29:20