Перенаправление Nginx Try_files с потерей строки запроса - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь настроить конкретное перенаправление, чтобы принудительно перенаправить на index.php (для Laravel) для определенного подкаталога, минуя существующий index.html.

URL-адрес, который я хочу перехватить, выглядит как это приложение /комплект //? электронная почта =.В каждом каталоге есть файл index.html (и по некоторым деловым причинам это трудно изменить)

Перенаправление кажется работающим, но когда я анализирую $ _SERVER в index.php, я теряю строку запроса.

Моя конфигурация Nginx выглядит следующим образом:

server {
      server_name somedomain.com;
      root /home/www/preprod/current/public/;


        rewrite_log on;
        access_log /var/log/nginx/preprod-access.log;
        error_log /var/log/nginx/preprod-error.log notice;

        location ~* /kit/(.*)/index\.html {
              error_log /var/log/nginx/preprod-kit-error.log debug;
              try_files /index.php?$query_string /dev/null;
        }

      location / {
          index index.php index.html;
          try_files $uri $uri/ /index.php?$query_string;
          client_max_body_size 0;
          autoindex off;
          allow all;
      }

      location ~ \.php$ {
        error_log /var/log/nginx/preprod-php-error.log debug;
        #try_files $uri =404;
        #fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_intercept_errors off;
        fastcgi_connect_timeout 300s;
        fastcgi_read_timeout 15m;
        fastcgi_send_timeout 600s;
        fastcgi_keep_conn on;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        client_max_body_size 0;
        include snippets/fastcgi-php.conf;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
      }
}

Все приложение отлично работает, кроме этого.

Редактировать 1: сниппеты / fastcgi-php.conf

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

#fastcgi_index index.php;
include fastcgi.conf;

1 Ответ

0 голосов
/ 12 июня 2018

Я нашел решение, я использовал это:

 location ~* /kit/(.*)/(.*) {
        error_log /var/log/nginx/preprod.adsconsole.com-kit-error.log debug;
        rewrite /kit/(.*)/(.*) /index.php$is_args$args;
}

Регулярное выражение, очевидно, может быть лучше написано, но если оно может кому-то помочь!

...