我有大量的产品 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;
}