Загрузка рисунка о скрытием реальной папки

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем locker, 5 авг 2009.

Статус темы:
Закрыта.
  1. locker

    locker Писатель

    Регистр.:
    15 дек 2008
    Сообщения:
    6
    Симпатии:
    0
    Стоит такая задача - я хочу, чтобы при обращении к www.site.ru/imgs/img.jpg у меня бы загружался рисунок из www.site.ru/imgs/site.ru/img.jpg.

    Как сделать, чтобы работало?

    Парился, написал так

    PHP:
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteRule ^foto/(.*)$ http://%1/imgs/%1/$1 [R=301,L]
    В принципе все работает, но проблема в том, что если обращаться к картинке напрямую, он все равно укажет реальный адрес, а мне этого не хочется
     
  2. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    а если попробовать добавить что то вроде RewriteRule ^%1/imgs/(!%1) - [F]
     
  3. ZuArt

    ZuArt Создатель

    Регистр.:
    11 фев 2008
    Сообщения:
    16
    Симпатии:
    4
    Не проканает...
    После применения(!!!) любого правила (следует после него выход из списка или нет - не важно), производится снова проход с самого начала...
    И получается, что виртуальным адресом производится преобразование в реальный, значит будет еще проход с самого начала, а при проходе реальный будет в запретку - итог вообще ничего не отобразится.

    Скрыть реальное расположение картинок возможно только с использованием скриптов, которым можно передать параметры... а вот уже в скрипте делать обработку и преобразования, и потом выдавать картинку через себя...

    Что-то типа:
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteRule ^foto/(.*)$ http://%1/imgs/img.php?arg=%1/$1 [R=301,L]

    Если верить строке заголовка, там явно не Тифы лежат, а гифки/жепеги, а для "шлюзирования" их использовать 10 строк кода - мелочи.

    ЗЫ. да и в принципе, а чего этого бояться? реальный адрес разве где-то засвечивается? если в коде страниц светится "подставной", то откуда мне как посетителю вообще узнать реальный? Брутфорсом что-ли пытаться подобрать???
     
  4. locker

    locker Писатель

    Регистр.:
    15 дек 2008
    Сообщения:
    6
    Симпатии:
    0
    Спасибо за ответ. ПРосто это для сетки делается и светить подпапки не хрчется просто
     
  5. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    125
    Перечитал на два раза пост, и кажется дошло в чем проблема.
    Ты имеешь в виду, что при запросе в браузере www.site.ru/imgs/img.jpg адрес меняется на реальный www.site.ru/imgs/site.ru/img.jpg, а ты не хотел бы этого. Есил так, то вопрос решаемый.

    Все происходит от того, что ты делаешь внешний редирект, при этом всегда будет меняться адрес в строке браузера. Чтобы адрес не менялся, нужно делать внутренний редирект:
    1. располагать картинки на том же домене, что и страницы и .htaccess
    2. преобразование изменить вот так:
    PHP:
    RewriteEngine On
    RewriteBase 
    /
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteRule ^foto/(.*)$ imgs/%1/$[L]  
    Так картинка с адресом site.ru/foto/img.jpg будут браться из файла site.ru/imgs/site.ru/img.jpg

    Только незабудь перед этим всем перекинуть по 301 с www на без www иначе %{HTTP_HOST} будет разная, как ты понимаешь.
     
  6. Sargej_Saint

    Sargej_Saint Создатель

    Регистр.:
    5 ноя 2008
    Сообщения:
    45
    Симпатии:
    8
    Альтернатива...
    В www.site.ru нужно положить .htaccess со следующими диррективами:
    PHP:
    RemoveHandler .gif .jpg .png
    AddType application
    /x-httpd-php .php .gif .jpg .png
    RewriteEngine on
    RewriteRule 
    ^.htaccess$ - [F]
    RewriteRule ^foto/(.*).gifimg.php?image=$1.gif&type=gif
    RewriteRule 
    ^foto/(.*).jpgimg.php?image=$1.jpg&type=jpg
    RewriteRule 
    ^foto/(.*).jpgimg.php?image=$1.jpg&type=png
    ... а также нужно создать файл www.site.ru/img.php следующего содержания:
    PHP:
    <?
    $image=file_get_contents("imgs/".$_SERVER['HTTP_HOST']."/".$_GET['image']);
    header("Content-type: image/".$_GET['type']);
    echo 
    $image;
    ?>
    Все! Теперь любая картинка http://www.site.ru/foto/img.[gif|jpg|png] будет грузиться из http://www.site.ru/imgs/site.ru/img.[gif|jpg|png]
     
Статус темы:
Закрыта.