как PHP может изменить URL - PullRequest
       21

как PHP может изменить URL

0 голосов
/ 14 января 2012

Я пытаюсь использовать PHP, чтобы изменить все динамические URL внутри div на другой статический 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 просто отправляли пользователя на домашнюю страницу нового сайта.

Ответы [ 3 ]

3 голосов
/ 15 января 2012

PHP может заменить строку другой строкой в ​​выводе HTML, да, но это не значит, что это хорошая идея. Похоже, что это будет достигать именно того, чего вы хотите на первый взгляд, но не очень тонко, и (в случае веб-сайта, сканированного пауком поисковой системы) сломает существующих клиентов, которые ожидают, что URL останутся прежними.

Вместо того, чтобы пытаться перехитрить HTTP с PHP, просто используйте HTTP в ваших интересах. Если у вас есть доступ к серверу oldsite.com и все ссылки для него должны быть перенаправлены на новый сервер по адресу newsite.com по тем же URL-путям, то используйте свой веб-сервер, чтобы сообщить клиентам ответ HTTP/1.0 301 Permanently Moved и Location: http://newsite.com/foo-bar-baz header.

Это проинформирует ALL HTTP-клиентов вашего веб-сайта о том, что старое содержимое можно найти по новому адресу, а также проинформирует клиента об обновлении его закладок, а также об аннулировании его кэшированного местоположения и другой сохраненной информации. mod_rewrite делает это абсолютно тривиальным в Apache, но если вам абсолютно необходимо использовать PHP, в качестве крайней меры использует свою функцию header() для отправки тех же заголовков HTTP, что и mod_rewrite.

0 голосов
/ 15 января 2012

Вы можете сделать это используя регулярные выражения:

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

Это изменит все URL, начиная с http://oldsite.com до http://newsite.com.

0 голосов
/ 14 января 2012
<?php str_replace( 'http://oldsite.com/', 'http://newsite.com/', $content );?>

str_replace принимает 3 параметра. Первое - это то, что вы хотите изменить (иголка), второе - то, что вы хотите изменить, и третье - то, что вы ищете (стог сена).

Вы также можете использовать встроенный троичный оператор:

<?php($link==$old_link)? 'http://newsite.com/': 'http://oldsite.com/';?>
...