Имеется сервис с URL двух типов:
- domain.com/?page=somepage
- domain.com/?page=somepage&value=somevalue
Значения переменных
$page и
$value используются для дальнейшей обработки и вывода необходимого содержимого.
Необходимо сделать редирект, и привести URL к виду:
- domain.com/somepage
- domain.com/somepage/somevalue
По отдельности для того или иного URL реврайты работают, но объединить их знаний nginx не хватает.
location / {
try_files $uri $uri/ @fallback;
}
location @fallback {
rewrite ^/(.*)$ /index.php?page=$1&$args last;
}
и соответственно
location / {
try_files $uri $uri/ @fallback;
}
location @fallback {
rewrite "^/([^/]*)/(.*)(/?)+$" /index.php?page=$1&value=$2 last;
}
Полный конфиг nginx
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ${NGINX_HOST};
index index.php;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
## error_page 404 /index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ @fallback;
}
location @fallback {
rewrite ^/(.*)$ /index.php?page=$1&$args last;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}