2015-01-21 3 views
-2

У меня есть большое количество URL идентификатор продуктаURL Rewrite с Nginx и PHP

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

Мой случай использования переписать эти URL ниже формат

/продукта/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 

ответ

0

Rewriting происходит исключительно на сервере, требуется к B, как в

rewrite A B 

Если A domain.com/product.php?product_id=123412&app_data=cHJvZHVjdF9pZD0xODc2NTEmZGVmU2, то вы делаете это назад.

Try:

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; 
} 
+0

Это не решает мою проблему .. если доступ ** domain.com/product.php product_id = 123412 & App_Data = cHJvZHVjdF9pZD0xODc2NTEmZGVmU2 ** ? Я не перенаправлял на ** domain.com/product/productid/appdata ** , но если я прямо попал ** domain.com/product/productid/appdata **, я получаю результат, но мой CSS и стиль изображения ломается. и еще одна вещь, что я не использую фрейм-рамки. Это жестко закодированный код. – user3382916

0

Неясно, если вы хотите перенаправить или внутренний переписывают. Первый случай:

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; 
}