nginx 301 cadeia de consulta de redirecionamento

1

Estou tentando redirecionar esse URL feio,

/index.php/component/qs/?com=qs&id=1234

para

/product/?id=1234

Então eu pensei em fazer algo assim,

server {
listen 443 ssl http2 default_server;
listen 443 [::]:443 ssl http2 default_server;

server_name www.example.com;

root /home/example/public_html/;

index index.php index.html index.htm;

location / {
try_files $uri $uri/ =404;
if($query_string ~ "id=(\d+)") {
rewrite ^.*$ /products/?id=$1 permanent;
}}

location ~ \.php$ {
include snippets/fastcgi-php.conf
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_intercept_errors on;
}
}

quando executo nginx -t , recebo o seguinte erro,

nginx: [emerg] unknown directive "if($query_string"

Eu tinha este trabalho no Apache, mas sou novo no Nginx, qualquer ajuda seria apreciada.

    
por jeff 13.08.2016 / 18:52

2 respostas

0

O nginx armazena os parâmetros de consulta de URL em $arg_name parameters.

Portanto, você pode usar $arg_id na instrução if . Além disso, você deve usar outro local antes da sua diretiva location / :

location /index.php/component/qs {
    if ($arg_id) {
        rewrite ^ /products/?id=$arg_id permanent;
    }
}

Se $arg_id for uma cadeia vazia, a instrução if não será executada. Em rewrite , ^ é a forma mais curta de reescrever qualquer URL. Como a URL e o argumento id são correspondidos anteriormente, não há necessidade de fazer qualquer correspondência na instrução rewrite .

    
por 13.08.2016 / 19:20
0

Há um espaço ausente após o nome da diretiva if . Deve ser:

if ($query_string ~ "id=(\d+)")

não

if($query_string ~ "id=(\d+)")
    
por 14.08.2016 / 12:35

Tags