Перенаправление в случае присутствия ошибки 404

shortgun nginx-forum на nginx.us
Вт Янв 18 13:47:19 MSK 2011


Добрый день, не могу разобраться, как
решать следующую задачу.

Есть система в php, Magento. В ней существуют
урлы вида 
http://mysyte.com/somepath/tovar1.html - физически, html
файла нет. внутри продукта происходит
обработка через php и выдача контента по
этой урле. Теперь возникает ситуация,
что контент снят с продаж, и по урле
вида http://mysyte.com/somepath/some_page.html выдается
сообщение от самой магенто - товара нет,
товар не найден, error 404, однако, товар
доступен как архивный по урле
http://mysite.com/tovar1.html

Можно ли при помощи try_files или rewrite
сделать следующее:
if (в ответ получаем 404) 
  заменить /some_path/tovar1.html на /tovar1.html

Делать это надо именно в случае 404.
Физически - файлов вида .*\.html как файлов
для проверки в условии if - на самом деле
нет! там же происходит обработка через
скрипт index.php....

Исходный конфиг
[code]
         location ~ .php$ {
             root            /raid0/www;
             fastcgi_pass   phpfarm;
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_NAME $fastcgi_script_name;
             fastcgi_param  SCRIPT_FILENAME   
/raid0/www/$fastcgi_script_name;
             include        fastcgi_params;

         }
         location / {
             #rewrite  ^/.*/(.*)\.html$  http://mysite.com/$1.html 
break;
             root            /raid0/www;
             fastcgi_pass   phpfarm;
             fastcgi_param  SCRIPT_NAME index.php;
             fastcgi_param  SCRIPT_FILENAME    /raid0/www/index.php;
             include        fastcgi_params;
             #try_files      $uri  $uri/index.html  @deletedproducts;
         }
         location @deletedproducts {
             rewrite  ^/.*/(.*)\.html$  http://igigidev.com/$1.html 
last;
             root            /raid0/www/igigi.com;
             fastcgi_pass   phpfarm;
             fastcgi_param  SCRIPT_NAME index.php;
             fastcgi_param  SCRIPT_FILENAME   
/raid0/www/igigi.com/index.php;
             include        fastcgi_params;
         }

[/code]

В коде есть закоментированная строчка
с rewrite, при ее открытии абсолютно все
запросы на /some_path/some_page.html
перебрасываются на /some_page.html... а нужно,
чтобы перебрасывались только те,
которые дадут 404
если открыть строчку try_files - то
результат тот же - реврайту
подвергаются все странички.
Абсолютно... (((( как оперировать ответом
404 от php-системы? Ибо она в данном случае
черный ящик!

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,167161,167161#msg-167161




Подробная информация о списке рассылки nginx-ru