2016-11-01 66 views
0

好吧,我對.htaccess有點麻煩,因爲我是初學者。這是我想要完成的。htaccess - 用兩條規則重寫url

URL DESIRED: example.com/package/forest/

我現在擁有的一切:

RewriteRule ^package/forest/$ 
/deep/file/do_stuff.php?action=package&location=forest [R=301,QSA,L] 

這是工作的打算,當你去example.com/package/forest你會得到由do_stuff.php生成的頁面。我無法得到的難題是,如果我想發送額外的GET變量到do_stuff頁面,但保持相同的URL。

開頭的URL: example.com/package/forest/list/5/2015-10-03

STILL所需的URL: example.com/package/forest

區別在於,我想重寫或重定向,不確定這個詞,是

/deep/file/do_stuff.php?action=package&location=forest&pictures=5&date=2015-10-03 

這次。

不知道如何堆棧規則,以便我最終使用相同的URL,無論它們是否傳遞額外的變量。

回答

0
RewriteRule ^package/forest/list/(\d)/(\d{4}-\d{2}-\d{2})$ package/forest/deep/file/do_stuff.php?action=package&location=forest&pictures=$1&date=$2 

正則表達式捕獲兩個組,一個使用一個數字,另一個使用日期。這些以後用作$ 1和$ 2。

不幸的是,我不能測試它,因爲我使用nginx,所以我不是100%確定,如果我是正確的。 我想過在第一次重寫之後uri是否會被重寫,因爲「package/forest /」仍然會匹配,但是字符串末尾的美元符號會阻止比匹配更長的uri。由於同樣的原因,您不必擔心堆疊;第一條規則只適用於短uri以「forest /」結尾,僅次於那些有日期的人。
另一方面,我想知道你爲什麼使用QSA標誌。包含查詢的uri將永遠不會匹配,因爲後面的美元符號。