2014-09-25 85 views
1

需要用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哈希时也没有问题。这涉及到重建我们的网址,但它是值得的,现在一切工作都应该如此。

回答

2

你可以试试:

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

编辑:

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

只是改变正则表达式的相关部分:

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

关于第二个什么** **在'&shop_id = 1000005620&'到底,如何将其替换为**或者不匹配rewriteCond,以至于最终我会得到**?**,就像这个'/#/ shop/1000005620?'。 – Lamukra 2014-09-25 20:33:50

+0

@Lamukra对不起,没有看到,请参阅上面的编辑 – 2014-09-25 20:41:04

+0

如果我只是要将'http://example.com/?shop_id = 1000005620'重写为'http://example.com/#/shop/1000005620'什么是重写规则呢? – Lamukra 2014-09-25 21:40:53