我有一个从旧系统到新系统的迁移项目。迁移到新系统将为正在迁移的对象创建新的唯一ID。但是,我的用户和搜索索引将包含带有旧ID的URL。我想设置一个apache重定向或重写来处理这个问题,但我担心大量对象的性能(我希望有大约500K旧的id到新的id映射)。
有没有人在这个规模上实现这个?或者知道apache是否可以支持这个重大的重定向映射?
答案 0 :(得分:2)
如果您有一组固定的映射,则应该提供该类型的mod_rewrite rewrite map 哈希文件一试。
答案 1 :(得分:2)
我最近有同样的问题。由于我没有找到实际答案,我们实施了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
答案 2 :(得分:1)
你能用较少数量的规则来表达重写吗?是否有将旧URL链接到新URL的模式?
如果没有,我会关注Apache的500K +重写映射,这只是它的舒适区域。不过,它可能会给你带来惊喜。
听起来我需要编写一个数据库支持的应用程序来处理重定向,映射本身存储在数据库中。这会扩大得更好。
答案 3 :(得分:1)
我认为这是一个古老的话题,但你们每个人都找到了解决方案吗?
我有一个案例,开发人员使用htaccess在RedirectMatch
文件中使用.htaccess
重定向超过30,000个网址。
考虑到此文件的大小,我担心性能和管理错误。
我建议的是,因为所有旧网址都有:
/sub/####
他们将此移动到数据库并创建
/sub/index.php
重定向所有请求:
www.domain.com/sub/###
到
www.domain.com/sub/index.php
然后让index.php发送重定向,因为可以在数据库中查找新的URL和旧ID。
这样,只有对旧URL的HTTP请求才会发生重写过程而不是每个HTTP请求。