我有一个从遗留系统到新系统的迁移项目。迁移到新系统将为正在迁移的对象创建新的唯一 ID;但是,我的用户和搜索索引将具有旧 ID 的 URL。我想设置一个 apache 重定向或重写来处理这个问题,但我担心大量对象的性能(我希望有大约 500K 旧 id 到新 id 映射)。
有没有人在这个规模上实施过这个?或者知道 apache 是否可以承受这么大的重定向映射?
我有一个从遗留系统到新系统的迁移项目。迁移到新系统将为正在迁移的对象创建新的唯一 ID;但是,我的用户和搜索索引将具有旧 ID 的 URL。我想设置一个 apache 重定向或重写来处理这个问题,但我担心大量对象的性能(我希望有大约 500K 旧 id 到新 id 映射)。
有没有人在这个规模上实施过这个?或者知道 apache 是否可以承受这么大的重定向映射?
如果您有一组固定的映射,您应该尝试使用Hash File类型 的mod_rewrite 重写映射。
我最近有同样的问题。由于我没有找到实际的答案,我们实施了一个 htaccess 6 规则,其中 3 条有 200,000 个条件。
这意味着一个大小为 150 MB 的 htaccess 文件。半天其实还好,当时没有人使用这个特定的网站,即使页面加载时间在几秒钟内。然而第二天,我们的整个服务器就被砸了,负载远高于 400。(机器是 8 核,16 GB RAM,SAS RAID5,所以通常资源没有问题)
我建议你是否需要实现这样的东西。设计您的规则,使它们不需要条件,并将它们放在 dbm 重写映射中。这很容易为我们解决了性能问题。
http://httpd.apache.org/docs/current/rewrite/rewritemap.html#dbm
你能用更少的规则来表述重写吗?是否有将旧 URL 链接到新 URL 的模式?
如果不是,我会担心 Apache 有 500K+ 重写映射,这已经超出了它的舒适区。不过,它可能会让你大吃一惊。
在我看来,您需要编写一个数据库支持的应用程序来处理重定向,并将映射本身存储在数据库中。那会更好地扩展。
我看到这是一个老话题,但你们每个人都找到了解决方案吗?
RedirectMatch
我有一个案例,开发人员使用 htaccess在一个.htaccess
文件中重定向超过 30,000 个 URL 。
鉴于此文件的大小,我担心性能和管理错误。
我推荐的是,因为所有旧网址都有:
/sub/####
他们将其移至数据库并创建
/sub/index.php
重定向所有请求:
www.domain.com/sub/###
至
www.domain.com/sub/index.php
然后让 index.php 发送重定向,因为可以在数据库中查找新 URL 和旧 ID。
这样,只有对旧 URL 的 HTTP 请求会触发重写过程,而不是每个 HTTP 请求。