ISAPI重写到子域的重写帮助

时间:2011-03-10 19:17:24

标签: iis asp-classic subdomain isapi isapi-rewrite

我需要一些ISAPI语法帮助,我即将把一个新站点放到一个新站点,并希望将旧论坛归档到一个归档子域。

该论坛位于ASP中,目前有此网址

http://www.mywebsite.co.uk/forum/forum_posts.asp?TID=34419 http://www.mywebsite.co.uk/forum/forum_topics.asp?FID=47

我希望论坛的每个请求都被重定向到:

http://archive.mywebsite.co.uk/forum/forum_posts.asp?TID=34419 http://archive.mywebsite.co.uk/forum/forum_topics.asp?FID=47

基本上在带有.asp扩展名的论坛文件夹中有或没有查询字符串的任何内容 - 任何帮助都非常感谢。

由于

1 个答案:

答案 0 :(得分:3)

为了将网址重定向到子网域,问题已经过去几个月,但也许这仍然会有所帮助。

假设您正在使用isapi_rewrite v3,请尝试以下操作:

RewriteCond %{HTTP:Host} ^www\.
RewriteRule ^/forum/(.*\.asp)$ http://archive.mywebsite.co.uk/forum/$1 [NC,R=301]

第一行查找以www开头的主机。 (带尾随点)。这可确保您无法获得无限循环,将归档重定向到自身。只做www时,尾随点是挑剔的,而不是像www2那样的其他。

第二行查找/forum/,然后捕获(...)任意字符.*和字面点和asp \.asp,结束网址$

然后转到/forum/文件夹中的子域(因为/ forum /未被捕获,我们需要重复它),以及捕获的所有其余网址$1

NC表示不区分大小写,因此所有这些都可以是大写和小写混合。 R=301表示重定向,并使其成为永久301重定向,因为这不是暂时的。

在v3规则中,查询字符串参数完全独立于规则处理,因此您不必在此处执行任何操作。如果没有参数,那么这是有效的。如果有参数,则会按照您上面的问题传递它们。

这会忽略http vs https。它将重定向到http,因此如果原始版本为https,则可能会出现浏览器警告。有办法处理它,但我不想弄乱基本的答案。

将域本身置于重写规则中对我来说总是有点奇怪,因为你可能想要移动它。您可以在第一行捕获主机的其余部分,并在第二行中使用它。

RewriteCond %{HTTP:Host} ^www\.(.*)$
RewriteRule ^/forum/(.*\.asp)$ http://archive.%1/forum/$1 [NC,R=301]

这与上面类似,除了捕获www-dot之后的主机,到行(.*)$的末尾我不确定这里是否需要$,但它使它明确我们想要一切。

RewriteCond捕获用百分号编号,因此重写规则中的%1替换子域后的主机,而$1仍然意味着替换捕获的... asp url。