0

我正在尝试使用 PHP 将 div 中的所有动态 URL 更改为不同的静态 URL。

例如我有:

<div class="mydiv">
  <a href="http://oldsite.com/123">Title 123</a>
  <a href="http://oldsite.com/321">Title 321</a>
  <a href="http://oldsite.com/abc">Title abc</a>
  <a href="http://oldsite.com/cba">Title cba</a>
</div>

我想将它们全部更改为:

<div class="mydiv">
  <a href="http://newsite.com">Title 123</a>
  <a href="http://newsite.com">Title 321</a>
  <a href="http://newsite.com">Title abc</a>
  <a href="http://newsite.com">Title cba</a>
</div>

我知道我可以用 htaccess 做到这一点,但如果可能的话,我更愿意在 PHP 中做到这一点。有任何想法吗?

编辑:oldsite.com 链接是从 RSS 提要生成的,并被嵌入到页面中。我希望所有 RSS 标题链接仅将用户发送到新站点主页。

4

3 回答 3

3

PHP 可以在您的 HTML 输出中用另一个字符串替换一个字符串,是的,但这并不意味着这是一个好主意。这似乎完全可以实现您在表面上想要的,但是会以微妙的方式破坏,并且(在搜索引擎蜘蛛抓取的网站的情况下)它将破坏期望 URL 保持相同位置的现有客户端。

与其试图用 PHP 超越 HTTP,不如使用 HTTP 来发挥自己的优势。如果您有权访问该服务器,oldsite.com并且它的所有链接都必须重定向到位于相同 URL 路径的新服务器,则使用您的 Web 服务器通过响应和标头newsite.com通知客户端。HTTP/1.0 301 Permanently MovedLocation: http://newsite.com/foo-bar-baz

这将通知您网站的所有HTTP 客户端可以在新地址找到旧内容,并通知客户端更新其书签并使其缓存位置和其他存储信息无效。mod_rewrite这在 Apache 中绝对是微不足道的,但如果你绝对必须使用 PHP,那么作为最后的手段,使用它的header()功能来发送相同的 HTTP 标头mod_rewrite

于 2012-01-14T22:19:24.623 回答
0

您可以使用正则表达式来做到这一点:

$content = preg_replace("|http://oldsite.com(/([^'"]*)?)?|msi", "http://newsite.com", $content);

http://oldsite.com这将更改所有以to开头的 URL http://newsite.com

于 2012-01-14T22:03:25.320 回答
0
<?php str_replace( 'http://oldsite.com/', 'http://newsite.com/', $content );?>

str_replace 需要 3 个参数。第一个是你想要改变的东西(针),第二个是你想要改变的东西,第三个是你正在寻找的东西(干草堆)。

您还可以使用内联三元运算符:

<?php($link==$old_link)? 'http://newsite.com/': 'http://oldsite.com/';?>
于 2012-01-14T19:56:45.467 回答