2

我是 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]
4

2 回答 2

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]
于 2012-05-24T13:23:44.657 回答
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]。

于 2012-05-24T13:39:53.443 回答