Требуется помощь, чтобы переписать URL-адрес в Nginx для WHMPRESS

Мне нужно переписать URL-адреса в NGINX. Я пробовал много примеров из поисков Google, но не смог.

/manager/?whmpca=order_process&a=add&pid=5&a=add&currency=1&billingcycle=monthly

Мне нужно переписать его как

/manager/cart/a/add/pid/5/currency/1/billingcycle/monthly/

или что-то вроде этого

/manager/pid/5/currency/1/monthly

Редактировать 1: мы можем просто заменить '&' и '=' с URL на '/'. Таким образом мы получим что-то вроде

manager/whmpca/order_process/a/add/pid/5/a/add/currency/1/billingcycle/monthly

Edit 2: вот мой полный файл конфигурации.

server {
        server_name example.com www.example.com *.example.com 10.10.10.10;
        listen 10.10.10.10:443 default ssl;
        root /home/example/public_html;
        index index.php index.htm index.html;
        rewrite_log on;
#HMPRESS rewrite config
#       location /manager {
#       try_files $uri $uri/ /manager/?whmpca=$uri&$args;
#       }
location ~ ^/manager/?$ {
    return 302 /manager/cart/a/$arg_a/pid/$arg_pid/currency/$arg_currency/billingcycle/$arg_billingcycle;
}
## wordpress configuration

        location = /favicon.ico {
         log_not_found off; access_log off;
        }
        location / {
        try_files $uri $uri/ /index.php$args;
        }
## wordpress conf ends
        include /etc/nginx/fastcgi_cache.conf;
        include /etc/nginx/static-files.conf;
        include /etc/nginx/exclusions.conf;
        access_log /var/log/virtualmin/example.com_access_log;
        error_log /var/log/virtualmin/example.com_error_log notice;
        fastcgi_param GATEWAY_INTERFACE CGI/1.1;
        fastcgi_param SERVER_SOFTWARE nginx;
        fastcgi_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 /home/example/public_html$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;
        fastcgi_param DOCUMENT_URI $document_uri;
        fastcgi_param DOCUMENT_ROOT /home/example/public_html;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        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 PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS $https;
        location ~ \.php(/|$) {
                try_files $uri $fastcgi_script_name =404;
                fastcgi_pass unix:/var/php-nginx/134783825911919.sock/socket;
        }
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        ssl_certificate /home/example/ssl.combined;
        ssl_certificate_key /home/example/ssl.newkey.bak;

}
0
задан 1 June 2021 в 20:31
2 ответа
if ( $args ~ "whmpca=order_process&a=add&pid=(\d)&a=add&currency=(\d)&billingcycle=monthly" ) {
  set $pid $1;
  set $cur $2;
}
rewrite /manager/cart/a/add/pid/$pid/currency/$cur/billingcycle/monthly/ redirect;
0
ответ дан 28 July 2021 в 14:39

nginx сохраняет отдельные аргументы запроса в переменные с префиксом $ arg_ .

В этом случае вы можете использовать следующий шаблон:

location ~ ^/manager/?$ {
    return 302 /manager/cart/a/$arg_a/pid/$arg_pid/currency/$arg_currency/billingcycle/$arg_billingcycle;
}

Однако, если вам нужно ограничить действия на основе значения аргумента whmpca , тогда необходимы дополнительные ограничения.

Это также требует, чтобы каждый запрос имел эти аргументы. Если один аргумент отсутствует, он сломается.

0
ответ дан 28 July 2021 в 14:39

Теги

Похожие вопросы