2012-05-03 1 views
2

У меня небольшие проблемы с перестройкой мод. Мой друг пишет сценарий, который позволяет загружать изображения.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.

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

Спасибо.

+0

Почему вам даже нужно 'http: //' в правой части правила? И что означает «работает»? –

+0

Я отредактирую вопрос, чтобы он стал яснее. Сожалею! –

+0

В конфигурации apache для вашего виртуального сервера вы можете установить файл журнала mod_rewrite и сообщить Apache, чтобы он регистрировал все, когда к нему обращался URL-адрес веб-службы. Я подозреваю, что ошибка может быть не такой, как вы думаете. Директива Google RewriteLog для версии apache, которую вы используете. –

ответ

2

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

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

Для справки см this StackOverflow thread: и this bug report

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

1

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

0

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

Try:

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

Тем не менее. Я получаю ошибку 403 Forbidden. «У вас нет разрешения на доступ к запрашиваемому объекту. Он либо защищен от чтения, либо не читается сервером». –

+0

@ Inf.S try: '/upload.php? Url = $ 1' – honyovk

+0

Правило: RewriteRule^((http | https) + [\: \/\/\ w \.] + (Jpg | png | gif)) $ /upload.php?url=$1 [B, L, NC, R = 302] Still 403. Он снова работает, если я удаляю:. –

1

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

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

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

+0

Вот что я хочу делать. Вдохновение на самом деле происходит от reddit. Если вы столкнулись со страницей, которую хотите поделиться, просто добавьте «reddit.com/» перед URL-адресом страницы, и вы перейдете на страницу, чтобы вы могли делиться страницей. Я хотел сделать что-то подобное, но для изображений. Что касается расширений, это просто для целей тестирования. Мы принимаем только простые изображения, ничего сложного. –

+0

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

+0

Вы имеете в виду своего рода скрипт контроллера? Но как перенаправить все виды URL-адресов на него, если перенаправление прерывается, как только в URL-адресе будет перенаправлен двоеточие. Разве это не проблема? Есть ли способ перенаправить URL-адреса без перезаписи мод? –

Смежные вопросы