2010-06-11 112 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