2015-05-20 79 views
0

我正在爲我的應用程序添加一個REST API。 REST API位於我的應用程序的/ api中。我想要正確路由所有請求,包括有參數的請求。我有一個正在大部分下面的htaccess規則:如何正確的重寫這個URL?

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 [L] 
</IfModule> 

利用這些規則,我現在可以去: mysite.com/api/projects/get,它會正確地給我回JSON數據好像我會以常規方式訪問它mysite.com?url = url/project/get

我嘗試向請求添加參數時開始出現問題。 我的應用程序已經可以處理參數。所以,如果我要去:mysite.com/api/projects & type = 1,它會讓我回到類型1的項目。但是,我認爲這個URL看起來更像是:mysite.com/ api/projects?type = 1(注意代替&)

我該如何修改我的htaccess規則來處理這個問題?

我嘗試以下,但沒有運氣:

RewriteRule ^(.*)/?(.*)$ index.php?url=$1&$2 [L] 
+0

如果你正在做友好的URL並捕獲整個URI,那麼只需將它添加到最後而不是查詢字符串。 '/ api/projects/get/1',並且在你的代碼中你知道1的最後一個路徑是它的類型(如果它存在的話)。你應該停留在IMO的一種方法,而不是讓它複雜化。 –

回答

2

你需要使用查詢字符串附加標誌,如下圖所示:

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

documentation

當替換URI包含查詢字符串時,RewriteRule的默認行爲 是光盤使用現有的查詢字符串,並將其替換爲新生成的字符串 。使用[QSA]標誌會導致查詢 字符串被合併。

考慮以下規則:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA] 

隨着[QSA]標誌,用於/pages/123?one=two的請求將被映射到 /page.php?page=123&one=two。如果沒有[QSA]標誌,那個相同的請求 將被映射到/page.php?page=123 - 也就是說,現有的查詢 字符串將被丟棄。

+0

謝謝,QSA旗幟是這裏的關鍵。 – Justin