【发布时间】:2012-07-30 08:04:11
【问题描述】:
我的站点上有一个页面,该页面从同一服务器上另一个(旧)站点的数据库中获取并显示新闻项目。某些项目包含相对链接,应予以修复,以便它们直接指向外部站点,而不是在主站点上导致 404 错误。
我最初考虑在获取的新闻项目上使用<base> 标签,但这会改变整个页面的基本 URL,破坏主导航中的相对链接 - 而且感觉也很hackish。
我目前正在考虑创建一个正则表达式来查找相对 URL(它们都以 /index.php? 开头)并在它们前面加上所需的基本 URL。有没有更优雅的解决方案?该站点基于 Symfony 2 构建并使用 jQuery。
【问题讨论】:
-
您的新网站没有
/index.php文件吗?如果没有,为什么不创建一个并将这些行放入其中:header("{$_SERVER['SERVER_PROTOCOL']} 301 Moved Permanently"); header('Location: http://othersite.tld/index.php?'.http_build_query($_GET));- 这样您根本不必修改新站点上的输出。此外,如果您不能/不想这样做,您说您是从数据库获取数据 - 您是获取 URL 作为原始数据,还是获取预构建的 HTML? -
@DaveRandom:不幸的是,当前站点确实有一个
/index.php,并且数据库中的数据是预构建的 HTML。 -
好吧,至少你已经让它具有挑战性了。我们在谈论多少 HTML?我们都知道建议在 SO 上做任何与 HTML/regex 相关的事情的危险(尽管在这种情况下你是在寻找 URL 而不是查看 HTML 本身,所以它可能没问题)但是如果你可以将它加载到 DOM 和 XPath 中带有
src/href属性的元素会更好。是一大堆小块,一大块还是介于两者之间? -
@DaveRandom:这是几千块,每块几千字节。一次只显示一个,但越亮越好。
-
只批量更新数据库是否可以接受?这将是最好的方法。它可以在每次页面加载时即时完成,但这会增加页面加载时间的宝贵毫秒......
标签: php html url symfony relative-path