代码之家  ›  专栏  ›  技术社区  ›  jessegavin

如何用IIRF规则中的“下划线”替换“破折号”?

  •  0
  • jessegavin  · 技术社区  · 14 年前

    我有一个网络应用程序,它提供基于子域的图像。

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

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

    这会使URL变短并减少“不可见”。

    所以我设置了一个iirf.ini文件来进行一些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 回复  |  直到 14 年前
        1
  •  1
  •   marapet    14 年前

    如果您知道用户名中的破折号不超过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]
    

    它不漂亮,但很管用。