Настройка виртхосов NGINX: по любому URL выводится содержимое главной

При переносе сервера с Apache на NGINX столкнулся с тем, что при обращении к любому URL выводится содержимое главной страницы.

Я полагаю, что проблема кроется где-то в не корректной конфигурации NGINX. Если не так - поправьте.

На сервере установлен NGINX + PHP-FPM + PHP7.2.

Ниже файл конфига NGINX. Буду рад получить любую помощь.

server {
listen  01.23.45.67:443 ssl http2;
server_name  site.com www.site.com;
root  /home/user/workspace/sites/site.com;

if ($http_host ~ "^www\.(.*)$"){
set $http_host_1 $1;
rewrite ^(.*)$ https://$http_host_1/$1 redirect;
}

# ssl on;
ssl_certificate /etc/certs/user/site.com_10-07-2020_11:03:44_letencrypt.crt_v2;
ssl_certificate_key /etc/certs/user/site.com_10-07-2020_11:03:44_letencrypt.key;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers  "HIGH:!RC4:!aNULL:!MD5:!kEDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:ECDHE:!COMPLEMENTOFDEFAULT;
ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security 'max-age=604800';
access_log /etc/nginx/vhost_logs/site.com_access;
error_log /etc/nginx/vhost_logs/site.com_error;


location ~ /.well-known { allow all; }

# location ~* robots.txt  { root /etc/nginx; }

location ~ /\.ht {
deny all;
access_log off;
log_not_found off;
}

location / {

root /home/user/workspace/sites/site.com;
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}

}
location ~ \.php$ {
try_files $fastcgi_script_name =404;
root                       /home/user/workspace/sites/site.com;
#fastcgi_pass       localhost:9009;
fastcgi_pass unix:/var/run/php-fpm/php72w-user.sock;
include fastcgi_params;
fastcgi_split_path_info                 ^(.+?\.php)(/.*)?$;
fastcgi_index index.php;
fastcgi_param   SCRIPT_FILENAME         /home/user/workspace/sites/site.com$fastcgi_script_name;
fastcgi_param   PATH_TRANSLATED         /home/user/workspace/sites/site.com$fastcgi_script_name;

fastcgi_buffers 8 64k;
fastcgi_buffer_size 128k;
fastcgi_busy_buffers_size 128k;

fastcgi_connect_timeout 120;
fastcgi_read_timeout 900;
fastcgi_send_timeout 900;

fastcgi_cache off;
fastcgi_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
fastcgi_cache_valid 200 10s;

limit_conn lfcgi 50;

#fastcgi_param   SCRIPT_FILENAME         /workspace/sites/site.com$fastcgi_script_name;
#fastcgi_param   PATH_TRANSLATED         /workspace/sites/site.com$fastcgi_script_name;

set             $path_info              $fastcgi_path_info;
fastcgi_param   PATH_INFO               $path_info;
}

# error_page  404              /404.html;
# location = /40x.html {
# }
# error_page   500 502 503 504  /50x.html;
# location = /50x.html {
# }
}

Ответы (1 шт):

Автор решения: Magic Moment

Мне помог такой вариант: раньше в .htaccess для каждой внутренней страницы были такие правила:

RewriteRule ^page/([0-9]+)/$ index.php?page=$1 [L,QSA]

Преобразовав их для NGINX, я получил следующее:

rewrite ^/page/([0-9]+)/$ /index.php?page=$1;

Аналогично поступил и для других страниц. Например, строки в .htaccess

RewriteRule ^cat/([0-9]+)/(.*)/([0-9]+)/$ cat.php?id=$1&name=$2&page=$3 [L,QSA]
RewriteRule ^cat/([0-9]+)/(.*)/$ cat.php?id=$1&name=$2 [L,QSA]

для NGINX теперь выглядят так:

rewrite ^/cat/([0-9]+)/(.*)/([0-9]+)/$ /cat.php?id=$1&name=$2&page=$3;
rewrite ^/cat/([0-9]+)/(.*)/$ /cat.php?id=$1&name=$2;
→ Ссылка