#php #image #redirect #upload #http-headers
#php #изображение #перенаправление #загрузка #http-заголовки
Вопрос:
У меня есть веб-сайт, на котором есть изображения с такими URL-адресами:
http://mysite.com/image1.jpg
Мой сервер использует php для перенаправления на поддомен, который содержит фактический файл, например:
header('Location: http://images.mysite.com/image1.jpg');
Это отлично работает практически для всех целей, например, в теге img или при сохранении файла локально. Два URL-адреса по существу эквивалентны для этих целей. Однако, когда я захожу на сайт с загрузчиком изображений, например, tumblr или imgur, и пытаюсь загрузить первый URL-адрес, происходит сбой (сообщение «Ошибка при загрузке фотографии» или «Формат изображения не поддерживается, или изображение повреждено».).
Есть ли способ заставить это работать? Я пытался отправлять разные заголовки статуса, но они не помогли.
Редактировать:
Как было предложено, я мог бы сделать это с помощью перенаправления htaccess или путем открытия файла и отправки содержимого. Это будет работать нормально, за исключением того, что я не хочу, чтобы это происходило, когда пользователи используют файлы для других целей, например, для встраивания в тег img. Это потому, что мой images.mysite.com домен — это cdn для размещения моего графического контента, и это противоречило бы его цели, если бы мне пришлось резервировать контент с моего веб-сервера. И htaccess нежизнеспособен, потому что я хотел запустить некоторые PHP-скрипты при первом запросе URL.
Если бы я мог каким-то образом определить, когда он используется через загрузчик файлов, тогда я мог бы обрабатывать другие случаи отдельно. Но я не думаю, что смогу это обнаружить, не так ли?
РЕДАКТИРОВАТЬ 2 (РЕШЕНИЕ):
Хорошо, я пошел на хитрый компромисс: оказывается, что запросы на загрузку обычно не имеют параметра «accept_charset» в заголовке, тогда как запросы на встраивание имеют. Используя это, я могу определить, когда изображение запрашивается для загрузки, а затем я загружаю это изображение и отправляю содержимое. Не надежное решение, но оно работает достаточно хорошо. Спасибо, ребята!
Комментарии:
1. Они могут быть эквивалентны для конечных пользователей, но загрузчики изображений ожидают файл, а не перенаправление.
Ответ №1:
Похоже, что ваш сайт для загрузки изображений не отслеживает сделанное вами перенаправление. Итак, чтобы это работало, вместо перенаправления вы должны открыть удаленный файл и отправить его содержимое.
Комментарии:
1. Я не уверен в этом на 100%, но разве перезаписи .htaccess не могут быть использованы?
2. Да, переписывание URL должно выполнить работу. На самом деле он не отправляет клиенту перенаправление заголовка.
3. htaccess будет работать, но я хотел сделать некоторые вещи php во время перенаправления (например, ведение журнала и другие вещи).
4. .htaccess выполнит точно такое же перенаправление заголовка, как он хочет, за исключением кода результата.
Ответ №2:
Вы не можете заставить это работать, потому что службы загрузки изображений ожидают фактического файла изображения, они не следуют никаким перенаправлениям.
Ответ №3:
Вы не должны использовать стандартный код результата (200 — OK) с перенаправлениями заголовков.
Взгляните на это руководство о том, как отправлять коды результатов.
Ответ №4:
Как уже говорилось в других постерах, службы загрузки изображений считывают данные, возвращаемые вашим URL
http://mysite.com/image1.jpg
в виде файла изображения — вот почему перенаправление сбивает с толку эти службы.
Почему бы вместо перенаправления не использовать PHP-скрипт, который считывает изображение из внешнего источника, а затем распечатывает двоичные данные? Вы можете выполнить это с помощью файла .htaccess, который ищет что-либо с «.jpg» в запросе.
Комментарии:
1. Это сработало бы, но тогда это будет выполняться для каждого запроса (а не только для загрузки файлов), что лишило бы цели размещения его на поддомене (который является cdn). Если бы я мог сделать это только для загрузки файлов, это было бы здорово, но многие люди также будут встраивать изображения в теги img, и я не хочу каждый раз заново загружать все изображения с моего cdn на мой сервер.
2. В этом случае вы можете сделать что-то вроде mysite.com/upload/image1.jpg будет выводить данные и mysite.com/image1.jpg будет сделано перенаправление.