用apache mod_rewrite重写部分查询字符串

时间:2014-09-25 15:48:17

标签: apache .htaccess mod-rewrite

需要帮助用mod_rewrite重写部分查询字符串。

查看了大量资源,并大致了解了工作原理,但无法找出正确的解决方案

此链接:

http://example.com/?param=home&shop_id=1000005620&ate=bow&b_uid=-1&tg=one

必须成为这个

http://example.com/?param=home/#/shop/1000005620?ate=bow&b_uid=-1&tg=one


如果更短,那么这部分查询字符串

&shop_id=1000005620&转换为/#/shop/1000005620?


更新:

答案让我清楚地了解了我必须做的事情。 修复我的问题的确切规则是这样的:

<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} ^(.*)&shop_id=([0-9]{10,12})(?:&)(.*)$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1?%1/#/shop/%2\?%3 [NE,L,R]
</IfModule>

<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} ^shop_id=([0-9]{10,12})$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}/#/shop/%1? [NE,L,R]
</IfModule>

此重写规则的原因是使用safari和ie进行哈希处理 我有外部页面使用的链接,如果站点请求http,我还有一个重定向到https。如果链接中存在哈希并且从Safari发送请求或IE哈希远离URL并且在重定向后不返回。我想要注意一个非常重要的事实,即使重定向到https后Chrome,Firefox也没有问题保持URL的哈希值。这涉及重建我们的URL,但它是值得的,现在一切正常。

1 个答案:

答案 0 :(得分:2)

您可以尝试:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)&shop_id=([^&]+)&?(.*)$
RewriteRule ^(.*)$ /$1?%1/#shop_id=%2?%3 [L,R,NE]

编辑:

  

如果我只将http://example.com/?shop_id=1000005620重写为http://example.com/#/shop/1000005620那么重写规则是什么呢?

只需更改正则表达式模式的相关部分:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^shop_id=([^&]+)$
RewriteRule ^(.*)$ /$1/#shop_id=%2? [L,R,NE]