Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: rewrite для nginx
 
 автор: Дмитрий Смаль   (08.06.2010 в 10:05)   письмо автору
 
 

Здравствуйте!

Задача такая
есть картинка http://site1/files/images/12345.jpg
цель чтобы на сайте http://site2 эта картинка отображалась в коде в таком виде
<img src="/files/images/12345.jpg" />

для этого в файл .htaccess на сайте http://site2 я ставлю
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^files/(.*)$ http://site1/files/$1 [L]

Это все хорошо работает у меня на локале.
Но на сервере для отдачи статики (в том числе картинки) стоит веб-сервер nginx.

Вопрос
как переписать данный реврайт для nginx.

  Ответить  
 
 автор: Дмитрий Смаль   (08.06.2010 в 14:35)   письмо автору
 
   для: Дмитрий Смаль   (08.06.2010 в 10:05)
 

У меня такое чувство что про nginx вообще мало кто знает.
В интернете мало информации а техподдержка хостинга буквально ответила что не может помочь, так как не знает как.

Пока временно решил эту проблему очень грубым способом
в .htaccess
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^files/(.*)$ /files.php?path=$1 [L]

files.php
$path = $_GET['path'];
$content = file_get_contents('http://site1/files/'.$path);
echo $content;


но конечно хочется просто написать правильный реврат

  Ответить  
 
 автор: Лена   (09.06.2010 в 20:46)   письмо автору
 
   для: Дмитрий Смаль   (08.06.2010 в 14:35)
 

Вот так

$path = $_GET['path'];
$content = file_get_contents('http://site1/files/'.$path);
echo $content;

вы отдаете файлы не через нгикс, а через апач. И толку от нгикса вам нет никакого.

Смысл тут в чем. Я напишу, как я поняла.
Есть у вас ссылка. Эта ссылка бросается на нгикс, который стоит перед Апачем. Так как нгикс не умеет работать с php, он перенаправляет эту ссылку Апачу. Апач отдает ссылку соответствующему php-скрипту. В скрипте надо послать заголовки, чтобы сделать редирект на нгикс(который и отдаст файл). У меня были такие заголовки:

        header("Content-Type: ".$ctype);
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: " .  filesize("путь к файлу/".$filename));
        header("Content-Disposition: attachment; filename=" . $filename);
        header("X-Accel-Redirect: путь к файлу/" . $filename);


Последний из перечисленных заголовков и делает перенаправление на внутреннюю секцию нгикса, которая отдает скачивать файл. Секция эта должна быть прописана в конфигурации нгикса:
Например, у меня было так:
location /repository/linked/ {
root /home/work/www/;
internal;
flv;
}
файлы, которые скачиваются, расположены в /repository/linked/

Я делала подобное месяц назад где-то, но мне все, что связано с нгиксом, писал админ, я писала только скрипт, который формирует на xml ссылку и обработчик запросов нгикса.
Там где-то у автора нгикса - Сысоева, есть персональный сайт, на нем я читала про работу и директивы модуля нгикс. Вам в них надо смотреть.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования