0

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

论坛在 ASP 中,目前有这个 URL

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

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

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

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

谢谢

4

1 回答 1

3

对于将 url 重定向到子域,距您的问题已经过去了几个月,但也许这仍然会有所帮助。

假设您使用的是 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,结束 url$

然后它会转到/forum/文件夹中的子域(因为 /forum/ 没有被捕获,我们需要重复它),以及被捕获的 url 的整个其余部分$1

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

在 v3 规则中,查询字符串参数与规则完全分开处理,因此您无需在此处执行任何操作。如果没有参数,则此方法有效。如果有参数,它们会按照您上面的问题传递。

这忽略了 http 与 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。

于 2011-07-23T03:35:19.393 回答