URl 用 nginx 和 PHP 重写


URl rewrite with nginx and PHP

我有大量的产品 ID URL

domain.com/product.php?product_id=123&app_data=xyz123

我的用例是将这些 URL 重写为以下格式

/

product/productid/appdata

我写了一个重写规则。

rewrite ^/product/productid/(.*)        /product.php?product_id=$1&$query_string last;

但是当我击中

domain.com/product.php?product_id=123412&app_data=cHJvZHVjdF9pZD0xODc2NTEmZGVmU2 

它不会重写为

domain.com/product/productid/appdata
重写

完全在服务器上进行,它将A带到B,如

rewrite A B

如果 A 是 domain.com/product.php?product_id=123412&app_data=cHJvZHVjdF9pZD0xODc2NTEmZGVmU2 ,那么你就是在倒退

尝试:

location / { 
  if ($query_string ~ "^product_id=([^&]+)&app_data=([^&' ]+)") { 
    rewrite ^/product.php$ /product/%1/%2? redirect; 
  } 
} 
location /product { 
  rewrite ^/product/([^/]+)/([^/]+)$ /product.php?product_id=$1&app_data=$2 break; 
}

目前还不清楚是要重定向还是内部重写。第一种情况:

location /product.php {
    rewrite 301 http://domain.com/product/$arg_product_id/$arg_app_data;
}

第二:

location / {
    rewrite ^/product.php$ http://domain.com/product/$arg_product_id/$arg_app_data last;
}