PHP включает от URL, который перенаправляет - PullRequest
1 голос
/ 22 декабря 2009

Я унаследовал плохое положение, когда в нашей сети у нас много (читай: много) размещенных сайтов, делающих это:

include "http://www.example.com/news.php";

Да, я знаю, что это плохо, небезопасно и т. Д., И это должно быть echo file_get_contents(...); или что-то в этом роде (вывод «news.php» - просто HTML), но, к сожалению, это то, что они используют сейчас и мы не можем легко это изменить.

Раньше работал нормально, до вчерашнего дня. Мы начали 301-перенаправлять все запросы www.example.com только на example.com. PHP, по-видимому, не следует этому перенаправлению, когда люди добавляют версию с www, поэтому этот редирект нарушает работу многих сайтов.

Подводя итог: есть ли способ заставить PHP следовать этим перенаправлениям? Я могу вносить изменения только на стороне example.com или через общесерверную конфигурацию.

Ответы [ 4 ]

2 голосов
/ 22 декабря 2009

Вы сказали в комментарии: «Я могу пойти и изменить все включения, но это будет просто много работы».

Да. Это «плохой, небезопасный, но« у меня нет причины менять код », возвращающийся, чтобы укусить вас. Это будет много работы; но теперь есть веская причина изменить это. Иногда вычищать старый беспорядок - самый простой выход, хотя и не самый простой.

Редактировать : Я не имел в виду «это ваш код и ваша ошибка», скорее, «плохой код - это часто много работы, которую нужно исправить, но обычно это меньше работы, чем сваливать хаки это для вечности, просто чтобы это работало ".

Что касается "перехода и изменения", я бы порекомендовал использовать cURL - он работает намного лучше, чем PHP-fopen-обертки.

1 голос
/ 22 декабря 2009

Ты не можешь использовать локон? В curl_setopt есть возможность следовать перенаправлениям.

0 голосов
/ 22 декабря 2009

Я не думаю, что какое-либо из этих решений, предоставляемых самим PHP, поможет ... Я просто не думаю, что какое-либо из них следует за заголовками, а что нет. Что бы это ни стоило, я думаю, что это правильное поведение: вы запрашиваете результат определенного запроса и получаете его. Тот факт, что результат говорит вам искать в другом месте, сам по себе является действительным результатом.

На вашем месте я бы посмотрел на cURL. Для него есть расширение PHP, и оно позволит вам следить за заголовками и переходить туда, куда вы пытаетесь попасть. Если это невозможно использовать (как, разумеется, вам, безусловно, необходимо использовать подход, которым вы пользуетесь в настоящее время), вам нужно будет отменить перенаправления на «исходном» сервере: возможно, вы могли бы заставить его вернуть информацию или перенаправить на основе запрашивает IP-адрес или что-то подобное?

0 голосов
/ 22 декабря 2009

Давайте начнем с перенаправления http repsonse.

<?php
error_reporting(E_ALL);
var_dump( get_headers('http://www.example.com/news.php') );
// include 'http://www.example.com/news.php'

Вывод должен содержать HTTP/1.0 301 Moved Permanently в качестве первой записи и Location: http://example.com/news.php где-то.

...