需要帮助用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,但它是值得的,现在一切正常。
答案 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]