我的站点数据库中有一个表(Magento,但这无关紧要,因为我将在 Magento 之外处理我的数据),其中充满了 URL 重写。这张表已经存在了很长一段时间,我的 URL 在那段时间里改变了不止一次。对于每个 URL,我现在都有如下内容:
REWRITES(Request, Target)
really-old-url, old-url
old-url, recent-url
recent-url, current-url
这按预期工作,really-old-url
被重定向到,current-url
但仅在really-old-url
被重定向到之后old-url
,被重定向到recent-url
,然后被重定向到current-url
。不是一个非常有效的设置:比需要更多的 301 重定向和每页更多的数据库请求。在最旧的 URL 和当前 URL 之间通常有五个或更多重定向,并且有数千个页面以这种方式重定向。
我想使用 PHP+MySQL 来循环这个表,最终得到以下结果:
REWRITES(Request, Target)
really-old-url, current-url
old-url, current-url
recent-url, current-url
应该很明显,现在每当请求页面的任何旧 URL 时,它只会被定向到当前 URL 一次。
我该怎么做呢?
编辑 - 这是戈登使用 Magento 的字段名称的正确答案,以防其他人想做完全相同的事情:
update core_url_rewrite r join (select r.request_path, r.target_path from core_url_rewrite r left outer join core_url_rewrite r1 on r.target_path = r1.request_path where r1.request_path is null) r2 on r.target_path = r2.request_path set r.target_path = r2.target_path;
编辑 #2 - 我只对is_system = 0
. 使用所有行可能会产生意外行为。