【问题标题】:URl rewrite with nginx and PHP使用 nginx 和 PHP 重写 URl
【发布时间】:2015-03-19 13:16:14
【问题描述】:

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

【问题讨论】:

    标签: php .htaccess mod-rewrite nginx url-rewriting


    【解决方案1】:

    重写完全发生在服务器上,需要 AB,如

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

    【讨论】:

    • 这不能解决我的问题.. 如果我访问 domain.com/product.php?product_id=123412&app_data=cHJvZHVjdF9pZD0xODc2NTEmZGVmU2 我没有重定向到 域.com/product/productid/appdata 但如果我直接点击 domain.com/product/productid/appdata 我会得到结果,但我的 css 和图像样式会被破坏。还有一件事我没有使用任何 php 框架。它是硬编码的自写代码。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-06
      • 2014-02-18
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多