Конфигурация Nginx без rewrite

inliquid nginx-forum at nginx.us
Fri Jun 27 00:47:28 UTC 2014


Добрый день,

пытаюсь переписать конфигурацию под форумный движок esoTalk на nginx, так
чтобы избежать использования rewrite, как рекомендует Игорь Сысоев... но не
получается...
Прошу уважаемое сообщество помочь...

Что имеем: 
1. сайт работает по ссылке example.com/forum, ЧПУ имеют вид
/forum/блабла/тынцтынц/.... иногда добавляются параметры ?token=....  и
т.д.
2. .htaccess из коробки для него имеет следующий вид:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
</IfModule>


3. Добился работающего аналога конфигурации nginx:

        location ~ \.(php) {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME
$document_root/$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
}

        location / {
                        try_files $uri @esotalk;
}

              location ~*
^/forum/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                      root /var/www/example.com;
              }

        location @esotalk {
             rewrite ^/(.*)$ /forum/index.php/$1 last;
}



Пытаюсь настроить как рекомендовано, без rewrite:


        location / {
                        try_files $uri @esotalk;
}



        location @esotalk {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME
$document_root/forum/index.php;
                fastcgi_param PATH_INFO /index.php$uri; # --->>>????
}


Вот содержимое fastcgi_params:

stcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;

fastcgi_param   SCRIPT_FILENAME         $request_filename;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;

fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;

fastcgi_param   HTTPS                   $https if_not_empty;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;


В итоге получаю что 

1. Адрес сайта меняется на http://example.com/forum// с '//' на конце
2. В исходном коде страниц появляются некорректные ссылки с этими '//'
3. При открытии страниц вручную по правильному url, например '/forum/admin'
выясняется, что ссылки на контент тоже генерятся не правильные но иного
плана, например '/forum/admin/uploads/avatars/1.jpg' вместо
'/forum/uploads/avatars/1.jpg'


При этом rewrite работает отлично. Помогите, пожалуйста, сделать нормальный
конфиг...

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



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