如何交换URL参数并使用mod_rewrite丢弃其他参数?

时间:2011-02-16 10:27:16

标签: regex apache url mod-rewrite configuration

我需要重定向简化:

/search.html?param1=val1&param2=val2&param3=val3&location=UK

致:

/search/United-Kingdom/arg4=val2&arg5=val1

参数可以是任何顺序或缺失,位置是在地图文件中扩展的代码(英国英国等)。

如果没有匹配的参数重定向到:

/search-info/

位置扩展的当前代码:

RewriteMap location_map txt:/path/to/locations_map.txt
RewriteCond %{REQUEST_URI} .*search.html.* [NC]
RewriteCond %{QUERY_STRING} .*location=([^&]+).* [NC]
RewriteCond ${location_map:%1} ^(.*)$
RewriteRule ^(.*)$ /search/%1/ [R=301]

如何换出参数名称并丢弃不需要的参数(即上面的参数3)?

1 个答案:

答案 0 :(得分:1)

如果不是变化的参数订单要求,这将有效。你不能让订单不变吗?

RewriteMap location_map txt:/path/to/locations_map.txt
RewriteCond %{REQUEST_URI} /search.html [NC]
RewriteCond %{QUERY_STRING} (param1=(.+?)&)?(param2=(.+?)&)?(param3=(.+?)&)?location=(.+?) [NC]
RewriteRule ^(.*)$ /search/${location_map:%7}/?arg4=%4&arg5=%2 [R=301,last]

RewriteCond %{REQUEST_URI} /search.html [NC]
RewriteRule / /search-info/ [last]