也做多個查詢字符串參數,怎麼辦你想看看?我從這開始,它使這個簡單,然後在下面變得更加棘手。
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,並停止在那裏重寫。或者,也許只能爲/頁面路徑執行此操作。
哇,謝謝。我已經有了一些使用第一和第二規則組合的工作,現在只需要對其執行一些測試。 –