代码之家  ›  专栏  ›  技术社区  ›  Ross

使用mod_rewrite重写查询字符串

  •  3
  • Ross  · 技术社区  · 16 年前

    在我的MVC应用程序中,我使用一个URI路由器来决定使用哪个控制器和操作,并从该URI中检测获取参数。我写这封信是为了让它接受这两种形式:

    http://localhost/controller/action/param1Name/param1Value
    http://localhost/controller/action?param1Name=param1Value
    

    现在我想做的是使用mod重写来重定向 ?p=v 形式到 /p/v 形式(推理是纯粹的表象,让形式使用 ?x=y 形式)。不过,我完全被自己如何做到这一点所困扰-我有一个想法需要用到 ${QUERY_STRING} 但我不知道怎么做。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Gumbo    16 年前

    如果您真的想重定向表单的请求 /controller/action?param1Name=param1Value /controller/action/param1Name/param1Value 试试这个:

    RewriteCond %{THE_REQUEST} ^GET\ /[^/]+/[^/]+\?[^\s]+
    RewriteCond %{QUERY_STRING} ^([^=&]+)=([^&]+)&?(.*)
    RewriteRule ^[^/]+/[^/]+.* /$0/%1/%2?%3 [N]
    RewriteCond %{THE_REQUEST} ^GET\ /[^/]+/[^/]+\?[^\s]+
    RewriteRule ^[^/]+/[^/]+.* /$0 [L,R=301]
    

    但如果你想相反:

    RewriteRule ^([^/]+/[^/]+)/([^/]+)/([^/]+)(/.*) $1$4?$2=$3 [QSA]
    
        2
  •  1
  •   Supertux    16 年前

    如果您这样做是出于装饰性的原因,您可能希望改为发布一篇文章,那么查询参数将不会显示在URL中。

    如果不是-我想亲自看看这个问题的答案!

    推荐文章