2011-07-24 153 views
0

有什麼辦法通過mod_rewrite隱藏Url的一部分。我目前正在使用url.html的一部分來拆分請求的頁面和查詢字符串。通過mod_rewrite刪除url的一部分

http://www.example.com/page/article/single.htm/articleid=8 

這將讓我知道請求的頁面是:

http://www.example.com/page/article/single 

而且追求字符串是:

article=8 

理想我希望有這樣的在不顯示.htm的情況下使用相同的網址

http://www.example.com/page/article/single/articleid=8 

的變量在查詢刺數隨着確實與.htm前水平的數量,以便該規則將需要動態

感謝

回答

1

也做多個查詢字符串參數,怎麼辦你想看看?我從這開始,它使這個簡單,然後在下面變得更加棘手。

http://www.example.com/page/article/single/articleid=8&anothervar=abc 

試試這個規則:

RewriteRule ^([^=]+)/(.+)$ $1.htm?$2 [NC,L] 

該處理的一個或多個查詢字符串參數,但需要至少一個。這會查找任何沒有=的東西,最多隻能是斜線,然後是其他所有內容。基本上,它使用=作爲路徑與查詢字符串部分的指示符;但實際上將其分割成斜線。 (數控是我的一個習慣,沒有必要在這種情況下,但是當我離開它,我忘了在需要時)。

爲了讓查詢字符串是可選的,因此它可以處理幾乎

http://www.example.com/page/article/single 

我發現最簡單的兩種規則,而不是試圖混入到一個規則是:

RewriteRule ^([^=]+)$ $1.htm [NC,L] 
RewriteRule ^([^=]+)/(.+)$ $1.htm?$2 [NC,L] 

你可以做一些更漂亮,使用一切斜線包括多個查詢字符串參數,就像這樣:

http://www.example.com/page/article/single/articleid=8/anothervar=abc 

這是一個有點毛茸茸的,但我想這樣的作品(不能讓他走了......)

的另一條規則處理與&符號代替斜線,然後做重寫如上。這是更容易保持直線 - 也許有辦法做到這一切在一次,但是這是棘手的足以讓我:

RewriteRule ^([^=]+)$ $1.htm [NC,L] 
RewriteRule ^([^=]+)/([^=]+=[^/]+)/([^=]+=.+)$ $1/$2&$3 [NC,LP] 
RewriteRule ^/([^=]+)/(.+)$ /$1.htm?$2 [NC,L] 

的第一條規則同上,但處理沒有查詢字符串的。這只是讓它走開了。

第二條規則是一個循環LP,這是我在示例中傾向於找到的一個循環,只要您有未知數量的替換。在這種情況下,它將用&符替換上一個querystring-slash,並循環直到只剩下一個(在第三個規則中將問號留下)。

它正在尋找這些articleid=8/anothervar=abc中最後一個還剩兩個參數。它取代了斜線與像articleid=8&anothervar=abc

在字的符號,它在尋找(並在括號中捕獲):

(not-equalsign) slash (not-equalsign equalsign not-slash) slash (not-equalsign equalsign anything) 

此排隊爲:

(not-equalsign)      /page/article/single 
slash        /
(not-equalsign equalsign not-slash) articleid = 8 
slash        /
(not-equalsign equalsign anything) anothervar = abc 

它取代了最後一個斜線用一個&符號,並在循環之後,將它變成上面的第一個草稿:http://www.example.com/page/article/single/articleid=8&anothervar=abc。第三條規則如上所述處理。

注意:這些也假設你的所有網址都是這樣的,因爲它們會對所有的東西都貼上.htm。如果你還想允許顯式/something/page.htm,那麼這些規則如果已經存在,就需要與.htm不匹配 - 類似的東西。或者,也許最初的規則是尋找.htm,並停止在那裏重寫。或者,也許只能爲/頁面路徑執行此操作。

+0

哇,謝謝。我已經有了一些使用第一和第二規則組合的工作,現在只需要對其執行一些測試。 –