RewriteCond:QUERY_STRING的2个参数

时间:2014-03-31 22:40:07

标签: .htaccess mod-rewrite

我正在处理访问我网站上的网址并添加
的API /?parameter1=value&parameter2=value到网址。我希望我的htaccess处理此请求并仅保留参数的值。 API还在查询字符串中添加了许多其他参数,但我只想保留其中的两个参数。

以下不起作用:

RewriteCond %{QUERY_STRING} ^parameter1=([^&]+)
RewriteCond %{QUERY_STRING} ^parameter2=([^&]+)
RewriteRule ^my-url/?$ controller.php?parameter1=%1&parameter2=%2

我该如何正确地做到这一点?

编辑:

这是一个例子。

The url is:
http://example.com/my-url/?parameter1=value1&stuff=1&stuff2=2&parameter2=value2

htaccess应该得到参数1&参数2值。

3 个答案:

答案 0 :(得分:2)

试试这个,只需抓住服务器端代码中的两个参数即可。例如$_GET。如果它们总是在查询字符串中,您只需检查parameter1然后它会附加其他参数,您就可以得到所需的信息。

 RewriteCond %{QUERY_STRING} ^\bparameter1=
 RewriteRule ^my-url/?$ controller.php [QSA,L]

答案 1 :(得分:0)

尝试以下方法:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /my-url/\?parameter1=(.*)&stuff=(.*)&stuff2=(.*)&parameter2=(.*)\ HTTP
RewriteRule ^ /controller.php?parameter1=%2&parameter2=%5\? [R,L]

请注意,如果网址中有始终 &stuff=1&stuff2=2这两个值,则只会获得两个参数。

答案 2 :(得分:0)

我不得不对GET中的键/值对进行类似的设置,具体取决于客户端平台,该顺序可以是任意顺序。

基于此线程中的有用指针,这是我根据上述问题想到的:

#= 1. Catch parameter1, append querystring as "p1=". Rewrite to "/parameter1" below:
RewriteCond %{REQUEST_URI}  ^/my-url/$
RewriteCond %{QUERY_STRING} ^parameter1=([^&]+)
RewriteRule (.*) /parameter1?%{QUERY_STRING}&p1=%1 [P,QSD]

#= 2. Catch parameter2, append querystring as "p2=". Rewrite to "/parameter2" below:
RewriteCond %{REQUEST_URI}  ^/parameter1$
RewriteCond %{QUERY_STRING} ^parameter2=([^&]+)
RewriteRule (.*) /parameter2?%{QUERY_STRING}&p2=%1 [P,QSD]

#= 3. Now explicitly catch p1,p2 and feed to them to the back-end url:
RewriteCond %{REQUEST_URI}  ^/parameter2$
RewriteCond %{QUERY_STRING} p1\=([^&]+)&p2\=([^&]+)$
RewriteRule (.*) controller.php?parameter1=%1&parameter2=%2 [P,L,QSD]

上面的内容对我来说很好,但是我确实注意到它的处理有点慢,因此,如果有人提出批评,我将很高兴听到它!