在我的MVC应用程序中,我使用uri路由器而不是确定要使用哪个控制器和操作,并检测来自uri的GET参数。我写了它以便接受这两种形式:
http://localhost/controller/action/param1Name/param1Value
http://localhost/controller/action?param1Name=param1Value
现在我想要做的是使用mod_rewrite将?p=v
表单重定向到/p/v
表单(推理纯粹是装饰性的,GET表单使用?x=y
表单)。我完全不知道如何做到这一点 - 我有一个想法,我需要使用${QUERY_STRING}
,但我不确定如何。
答案 0 :(得分:2)
如果您确实要将/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]
答案 1 :(得分:1)
如果您出于美观原因这样做,则可能需要执行POST,然后查询参数将不会显示在URL中。
如果没有 - 我想亲自看看这个答案!