2014-09-25 93 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