需要用mod_rewrite重写部分查询字符串的帮助。用apache重写部分查询字符串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?
UPDATE:
回答给了我一个清醒的认识了我必须做的。 是固定我的问题精确的规则是这样的:
<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 我有一个由外部页面中的链接,也是我有,如果网站重定向到HTTPS请求http。如果链接中存在散列并且从Safari发送请求,或者IE散列从URL中消失,并且重定向后不再回来。我想说明一个非常重要的事实,即使在重定向到https后,Chrome浏览器,Firefox在保持URL哈希时也没有问题。这涉及到重建我们的网址,但它是值得的,现在一切工作都应该如此。
关于第二个什么** **在'&shop_id = 1000005620&'到底,如何将其替换为**或者不匹配rewriteCond,以至于最终我会得到**?**,就像这个'/#/ shop/1000005620?'。 – Lamukra 2014-09-25 20:33:50
@Lamukra对不起,没有看到,请参阅上面的编辑 – 2014-09-25 20:41:04
如果我只是要将'http://example.com/?shop_id = 1000005620'重写为'http://example.com/#/shop/1000005620'什么是重写规则呢? – Lamukra 2014-09-25 21:40:53