使用apache mod_Rewrite重写部分查询字符串

使用apache mod_Rewrite重写部分查询字符串,apache,.htaccess,mod-rewrite,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

需要使用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\u 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>

RewriteCond%{QUERY_STRING}^(.*)和shop_id=([0-9]{10,12})(?:&)(.*))$
重写规则^(.*)$https://%{SERVER_NAME}/$1?%1/#/shop/%2\?%3[NE,L,R]
RewriteCond%{QUERY\u STRING}^shop\u id=([0-9]{10,12})$
重写规则^(.*)$https://%{SERVER_NAME}/#/shop/%1?[NE,L,R]
重写规则的原因是safari和ie的哈希处理 我有外部页面使用的链接,如果站点请求http,我还可以重定向到https。如果链接中有一个散列,并且请求是从Safari发送的,或者IE散列会离开URL,在重定向后不会返回。我想指出一个非常重要的事实,Chrome、Firefox即使在重定向到https之后,也不会在保留带有哈希的URL方面出现问题。这涉及到重建我们的URL,但这是值得的,现在一切都正常工作。

您可以尝试:

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
那么重写规则是什么

只需更改regex模式的相关部分:

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

第二个&in
&shop\u id=1000005620&
最后,如何将其替换为?还是不在第二次改写中匹配,这样最终我会得到?像这样
/#/shop/1000005620?
。如果我只重写
http://example.com/?shop_id=1000005620
进入
http://example.com/#/shop/1000005620
那么重写规则是什么?非常感谢!!!!!我将发布我需要的确切解决方案的更新。这是解决Safari和IE使用#in url处理重定向问题的一部分。再次感谢你!