我如何才能部分地重写基于查询字符串的URL

时间:2016-08-07 21:05:45

标签: apache .htaccess mod-rewrite url-rewriting httpd.conf

我想基于其查询字符串的一部分重写以下URL,但同时,我想保留查询字符串的其余部分。

原始网址:

http://example.com/index.php?route=product/show&item_id=25&show_mobile=true

转换为:

http://example.com/product/show/?item_id=25&show_mobile=true

我搜索过并在Apache上找到以下wiki:

https://wiki.apache.org/httpd/RewriteQueryString

但它没有用于在Query字符串中重写单个Key& Value对并​​保留其余部分的部分。

2 个答案:

答案 0 :(得分:1)

这应该让你接近,它基于wiki中的“删除密钥”条目。您希望隔离将在第一次捕获中进入路径的部分,并对剩余的查询字符串使用第二次捕获。

RewriteCond %{QUERY_STRING}  ^(route=[^&]*)&(.*)
RewriteRule ^index.php /%1?%2

答案 1 :(得分:0)

您可以使用此通用规则从查询字符串中以任意顺序捕获route的参数值,并在目标网址中重复使用:

RewriteEngine On

RewriteCond %{THE_REQUEST} \?(.*&)?route=([^&]*)&?(\S*)\sHTTP [NC]
RewriteRule ^index\.php$ /%2?%1%3 [R=301,NE,L]