将子域作为参数传递

时间:2012-05-24 13:11:27

标签: regex .htaccess subdomain isapi-rewrite wildcard-subdomain

我是ISAPI_Rewrite&的新手。我对正则表达式很糟糕。我需要ISAPI_Rewrite的重写规则,它将删除子域并将其作为参数传递。例如:

mysubdomain.mydomain.com

应该成为

mydomain.com/Landing.aspx?ID=mysubdomain

找到似乎匹配除www之外的所有子域的正则表达式,但我不知道如何将子域作为参数传递,如上例所示。

^((?:(?!www).)*)

任何帮助都将不胜感激。

注意:我正在使用完整版的ISAPI_Rewrite,因此此规则将位于网站级别。


全球规则:

# Helicon ISAPI_Rewrite configuration file
# Version 3.1.0.89

#Disable extentionless processing for ASP.Net v 4.0
RewriteRule (.*)eurl.axd/.* $1

# Don't rewrite urls that are inside the assets folder or have the following extentions
RewriteRule ((^/Assets/.*)|(.*\.axd.*)|(.*\.asmx.*)|(.*\.png.*)) $1 [NC,L]

#Rewrite URL, pass last portion of URL to Landing.aspx + purl
RewriteRule  (.*) $2/landing.aspx\?id=$1 [NC]

2 个答案:

答案 0 :(得分:1)

这样的事可能适合你:

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} ([^.]+)(?<!^www)(\.|$) [NC]
RewriteRule ^ Landing.aspx?ID=%1 [L,QSA]

PS:看起来你的全球规则与我的上述规则相冲突。因此,我建议你制定这样的全球规则以避免冲突:

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} !mydomain\.com$ [NC]
RewriteRule ^(.*)$ landing.aspx?id=$1 [L]

答案 1 :(得分:0)

尝试使用以下内容:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP:Host} !^www\.mydomain\.com$
RewriteCond %{HTTP:Host} ^([^.]+)\.mydomain\.com$
RewriteRule ^$ /Landing.aspx?ID=%1 [NC,L]

您没有指定是否需要301重定向或重写,因此如果您希望重定向,请使用[NC,R = 301,L]而不是[NC,L]。