LINUX.ORG.RU
ФорумAdmin

Nginx не работает rewrite

 , ,


0

1

Добрый день.

Есть один сайт, на nginx + php-fpm. Нужно сделать rewrite, чтобы обращения на saet.ru/uploads/123.jpg переписывались в saet.ru/saet/image/?image=/uploads/123.jpg.

Добавил блок location /uploads в конфиге ниже. Но вместо нужной станички отдается 404 ошибка.

server {
    server_name saet.ru;
    root /var/www/saet;
    charset utf-8;
    index index.php;
    access_log /var/logs/saet_access.log;
    error_log /var/logs/saet_error.log notice;
    rewrite_log on;

    location / {
        # Redirect everything that isn't a real file to index.php
        try_files $uri $uri/ /index.php$is_args$args;
    }
    location /uploads/ {
        rewrite ^(/uploads/.*)$ /saet/image/?image=$1 break;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000;
    }

    location ~ /\.(ht|svn|git) {
        deny all;
    }
}

Пробовал rewrite помещать выще в саму секцию server с параметром last, но все равно та же самая ошибка.

Deleted

Последнее исправление: MyLittleLoli (всего исправлений: 1)

Ответ на: комментарий от alexnorton

Функция rewrite есть в апаче а не нжинксе

https://nginx.org/ru/docs/http/ngx_http_rewrite_module.html

error.log

2016/10/21 15:04:06 [notice] 27361#27361: *2300 "^(/uploads/.*)$" matches "/uploads/123.jpg", client: 1.1.1.1, server: saet.ru, request: "GET /uploads/123.jpg HTTP/1.1", host: "saet.ru"
2016/10/21 15:04:06 [notice] 27361#27361: *2300 rewritten data: "/saet/image/", args: "image=/uploads/123.jpg", client: 1.1.1.1, server: saet.ru, request: "GET /uploads/123.jpg HTTP/1.1", host: "saet.ru"
access.log
1.1.1.1 - - [21/Oct/2016:15:04:06 +0300] "GET /uploads/123.jpg HTTP/1.1" 404 983 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0

Deleted
()
Ответ на: комментарий от Deleted

А почему у тебя не по сокетам работа настроена ?

Досталось по наследству, потом будет исправлено.

ищи по «Example – Configuring Custom Rerouting»

Ну у меня это и делается по сути, но почему-то не работает.

Deleted
()
Ответ на: комментарий от berrywizard

каталог /saet/image существует?

Нет, этот путь обрабатывается в php-скрипте.

/index.php существует?

Да.

.php обрабатываются?

Да.

Но все это не важно, т.к. оказалась проблема в том, что php-скрипту передается оригинальный request_uri, а не измененный.

Пока накостылял такое решение:

server {
    ...
    set $request_url $request_uri;
    set $request_query $query_string;
    if ($request_uri ~ ^/uploads/(.*)$ ) {
        set $request_url /saet/image/;
        set $request_query image=$request_uri;
...
    location ~ \.php$ {
        include snippets/fastcgi-php2.conf;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param   REQUEST_URI     $request_url;
        fastcgi_param   QUERY_STRING    $request_query;
    }
}

Deleted
()
Ответ на: комментарий от Deleted

В требовании написано, что нужно получить «saet.ru/saet/image/?image=123.jpg», а регулярка из конфига, насколько я вижу, отдаст «saet.ru/saet/image/?image=/uploads/123.jpg».

thesis ★★★★★
()
Ответ на: комментарий от thesis

Нужен именно 2 вариант, поправил оп пост.

Deleted
()
Ответ на: комментарий от Deleted

break заменить на last в location /uploads/
Убрать try_files из location /uploads/ т.к «last завершает обработку текущего набора директив модуля ngx_http_rewrite_module, после чего ищется новый location, соответствующий изменённому URI»
Т.е попадет в location / и далее в location ~ \.php$ а в php приходит env /saet/image/?image=/uploads/123.jpg

location /uploads/ {
    rewrite ^(/uploads/.*)$ /saet/image/?image=$1 last;
}

Deleted
()
Ответ на: комментарий от Deleted

Так я тоже делал. Результат тот же самый. Но я нашел еще один костыльный способ, помимо того, что выше.

Deleted
()
Последнее исправление: MyLittleLoli (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.