我需要一些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扩展名的论坛文件夹中有或没有查询字符串的任何内容 - 任何帮助都非常感谢。
由于
答案 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。