Другие сайты не могут загружать изображения с моего сайта, когда я использую перенаправления - PullRequest
1 голос
/ 26 октября 2011

У меня есть веб-сайт с изображениями с такими URL-адресами:

http://mysite.com/image1.jpg

Мой сервер использует php для перенаправления на поддомен, содержащий фактический файл, например:

header('Location: http://images.mysite.com/image1.jpg');

Это прекрасно работает практически во всех целях, например, в теге img или при локальном сохранении файла. Два URL по существу эквивалентны для этих целей. Однако, когда я захожу на сайт с загрузчиком изображений, например, tumblr или imgur, и пытаюсь загрузить первый URL-адрес, происходит сбой (например, «Ошибка при загрузке фотографии» или «Формат изображения не поддерживается или изображение повреждено»). .

Есть ли способ заставить эту работу? Я пытался отправить разные заголовки статуса, но они не помогли.

EDIT:

Как и предполагалось, я мог бы сделать это с помощью перенаправления htaccess или открыв файл и отправив содержимое. Это будет работать нормально, за исключением того, что я не хочу, чтобы это происходило, когда пользователи используют файлы для других целей, например, для встраивания их в тег img. Это связано с тем, что мой домен images.mysite.com является cdn для размещения содержимого моего изображения, и это может нарушить его назначение, если бы мне пришлось зарезервировать содержимое с моего веб-сервера. И htaccess нежизнеспособен, потому что я хотел запускать некоторые php-скрипты при запросе первого URL.

Если бы я мог как-то определить, когда он используется через загрузчик файлов, то я мог бы обрабатывать другие случаи отдельно. Но я не думаю, что смогу это обнаружить, не так ли?

РЕДАКТИРОВАТЬ 2 (РЕШЕНИЕ):

Хорошо, я сделал хакерский компромисс: оказалось, что запросы на загрузку обычно не имеют параметра "accept_charset" в заголовке, тогда как запросы на встраивание есть. Используя это, я могу определить, когда изображение запрашивается для загрузки, а затем я загружаю это изображение и отправляю содержимое. Не очень надежное решение, но оно работает достаточно хорошо. Спасибо, ребята!

Ответы [ 4 ]

2 голосов
/ 26 октября 2011

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

1 голос
/ 26 октября 2011

Как уже говорили другие авторы, службы загрузки изображений считывают данные, возвращаемые вашим URL

http://mysite.com/image1.jpg

как файл изображения - вот почему перенаправление смущает эти службы.

Вместо перенаправления, почему бы не использовать скрипт PHP, который считывает изображение из внешнего источника, а затем распечатывает двоичные данные? Вы можете сделать это с помощью файла .htaccess, который ищет в запросе что-нибудь с ".jpg".

1 голос
/ 26 октября 2011

Вы не должны использовать стандартный код результата (200 - ОК) с перенаправлениями заголовка.

Посмотрите это руководство о том, как отправлять коды результата .

1 голос
/ 26 октября 2011

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

...