Intereting Posts

Mod Переписать и передать URL как параметр

У меня небольшие проблемы с перестройкой мод. Мой друг пишет сценарий, который позволяет загружать изображения.

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

Например, если изображение находится по адресу: http://www.test.com/image.jpg , добавление domain.com /http://www.test.com/image.jpg позволит скрипту получить этот URL-адрес ( test.com), чтобы получить изображение, которое мы хотим.

EDIT: HTTP находится перед URL-адресом, потому что я не хочу, чтобы пользователь должен был удалить HTTP вручную. Они видят изображение в своем браузере, они добавляют «domain.com» перед ним, http и все, и сценарий извлекает это изображение и сохраняет его на нашем сервере.

Правило, которое я использую:

RewriteRule ^([\w|.|/]+(jpg|png|gif))$ /upload.php?url=http://$1 [B,L,NC,R=302] 

это правильно соответствует URL-адресам, но двоеточие в http: // вызывает проблемы.

Если пользователь вводит: domain.com/www.test.com/image.jpg, он работает.

Если пользователь вводит: domain.com/http://www.test.com/image.jpg, он не работает, и я получаю запрещенную страницу 403 (XAMPP в Windows).

Если пользователь вводит: domain.com/http//www.test.com/image.jpg, он работает (без двоеточия в http).

EDIT: Работая, я имею в виду, если я тестирую его локально, я получаю URL, который я передаю в параметре $ _GET ['url'] правильно, вместо того, чтобы видеть ошибку 403.

Не могли бы вы рассказать мне, что не так с этим правилом и как его исправить? Или любые альтернативные решения для достижения желаемого поведения?

Спасибо.

Ну, думаю, я нашел проблему. Это было не регулярное выражение, а mod_rewrite.

Так что это ошибка в Apache в Windows, которая была объявлена ​​WONTFIX.

Для справки см. Этот поток StackOverflow: и этот отчет об ошибке

Я отправляю то, что нашел, и рассмотрю этот вопрос. Спасибо вам всем!

Вы можете использовать urlencode () в php

Этот подход является громоздким, подверженным ошибкам и небезопасным (например, URL-адрес изображения не требуется для завершения этих хорошо известных расширений файлов)

Если я понимаю ваш случай использования, он начинается, когда пользователь просматривает веб-сайт, и он просматривает изображение, и он хочет поделиться им с помощью вашего сервиса. Затем он http://your.sharing.service вручную http://your.sharing.service в адресной строке браузера, непосредственно перед любым текстом. Затем вы используете mod_rewrite для запуска вашего скрипта, но я думаю, что ваше регулярное выражение (и ваша служба тоже) потерпит неудачу несколькими непредсказуемыми способами.

Я никогда не использовал такую ​​услугу, и я думаю, что предпочтительным является стандартный подход к использованию кнопки для отправки URL-адреса на какой-либо скрипт (скажем, http://my.service.com/upload?url=... ) ,

Проблема в вашем регулярном выражении …

Пытаться:

 ^((http|https)+[\:\/\/\w\.]+(jpg|png|gif))$