【问题标题】:ISAPI_Rewrite to 301 redirect old domain to new domain, running ASP.NET4ISAPI_Rewrite to 301 将旧域重定向到新域,运行 ASP.NET4
【发布时间】:2012-03-07 13:23:22
【问题描述】:

我在不同的 URL 上有两个相同的网站:

http://www.oldsite.co.ukhttp://www.newsite.co.uk。我想 301 将所有请求从旧站点重定向到新站点,以获取各种扩展名(例如“index.htm”、“images/image.jpg”、“directory/subdirectory/”等)。对旧域上任何类型的文件/文档/路径的所有引用都需要定向到新域上的相同位置。

网站运行使用 .NET4 的内容管理系统。

到目前为止,我已经尝试了这两种方法:首先通过在 IIS 中设置永久重定向。这在一定程度上有效,但给了我一个像这样的新 URL:

http://www.newsite.co.ukeurl.axd/5e42bf571e13754bbed8710d 2d377a5d/

关于“eurl.axd”的内容,我所能找到的只是它是由 ASP.NET4 框架引起的,该框架在重定向期间以某种方式拦截了请求。我发现的唯一解决方案将涉及禁用 asp.net 4(这不是 CMS 运行的选项)或进行某种注册表黑客,我真的不想这样做(记住那里是此服务器上的其他域)。

另一个选项是使用 ISAPI_Rewrite。我试过这个:

RewriteRule (.+) http://www.newsite.co.uk$1 [R=301,L] 

但这也给 eurl.axd 的东西带来了同样的问题。所以我尝试了这个,它删除了 eurl.axd 的东西,但似乎只适用于网站的主页 - 没有其他页面或资源:

RewriteRule (.*)eurl.axd/.* http://www.newsite.co.uk/$1 [R=301,L]

当我运行它时,错误日志中没有任何内容,但重写日志显示该规则未按预期工作,例如尝试访问“http://www.oldsite.co.uk/technical.aspx”只是在浏览器中加载该页面(无重定向)并输出此日志:

(2) init rewrite engine with requested uri /technical.aspx 
(1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf 
(1) Htaccess process request c:\inetpub\vhosts\oldsite.co.uk\httpdocs\.htaccess 
(3) applying pattern '(.*)eurl.axd/.*' to uri 'technical.aspx'

有谁知道如何修改此规则,以便将所有资源从旧域重定向到新域?

非常感谢!

【问题讨论】:

    标签: .htaccess asp.net-4.0 http-status-code-301 isapi-rewrite


    【解决方案1】:

    在 IIS 中创建新的空网站,将带有重定向规则的 .htaccess 添加到该网站,然后将 www.oldsite.co.uk 指向该网站。因此,您的 .NET4 CMS 将不会在对旧站点的请求时执行,并且在 URL 被重定向之前将无法更改它们。

    【讨论】:

    • 这是一个有趣的选择,谢谢。尽管在执行此操作之前,我需要 100% 确定我的重定向解决方案会重定向所有资源。标准的 IIS6 重定向会这样做吗?
    • 实际上,更进一步,如果我只是在旧站点上禁用 ASP.NET4 并通过 IIS 设置重定向,那会有效吗?
    • 我可以确认此解决方案不起作用。它适用于主页,但不适用于任何其他文件/文件夹/路径。如果我创建一个新域来进行转发,那么我基本上也必须创建整个文件夹结构,但不使用 .NET4,这不是解决方案。不过值得一试,谢谢。
    • 这仅适用于 IIS6 内置重定向。使用 ISAPI_Rewrite 它将起作用。只需创建一个新的空网站,将一些测试域名指向它并将您的规则放在该站点的 .htaccess 中,即: RewriteRule (.+) newsite.co.uk$1 [R=301,L] 这样您就可以测试解决方案无需更改您的生产域名。
    【解决方案2】:

    谢谢各位。我最终解决这个问题的方法是删除旧域中的所有文件并将其上的任何依赖项删除到 ASP.NET4(将应用程序池更改为不使用 .NET4 等的应用程序池),然后只需在IIS。所以我最终没有使用 ISAPI_Rewrite - IIS 处理得很好。

    所以现在,我旧域中的任何内容都指向新域,这是完美的。

    感谢您的指点,深入研究 IIS 很有趣,我不经常这样做。

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2013-06-26
      • 2016-11-14
      • 2016-02-22
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多