2012-09-11 31 views
1

我想寫一個重寫規則來改變路徑slu to查詢參數。它用於Web服務,並且只應在主機以api開頭時才重寫此規則。有兩個slu that,我試圖捕捉和重寫。第一個是可選的並且是版本(即v1.2),第二個是服務域(即客戶,交易等)。mod_rewrite在.htaccess文件中的路徑未知的第一部分

http://api.domain.com/v2.5/customers應該重寫?版本= 2.5 &域=客戶

我也想支持默認版本,以便

http://api.domain.com/customers應該重寫?版本= &域=客戶

這裏是我的.htaccess文件的樣子:

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} ^api\..* 
RewriteRule ^v([\d\.]*)?\/?([^\/]*)$ ?version=$1&domain=$2 

上述第一個示例正常工作,但無法使默認版本路徑正常工作。我嘗試了很多不同的東西。我認爲以^。* v開頭會有所幫助,但是沒有。當你不知道起始字符時,任何人都知道如何使它匹配?

回答

1

嘗試:

RewriteCond %{HTTP_HOST} ^api\..* 
RewriteCond %{QUERY_STRING} !version= 
RewriteRule ^(v([\d\.]*))?\/?([^\/]*)$ /?version=$2&domain=$3 [L] 

這使得/v部分可選:

  • /v2.5/foo - >/?version=2.5&domain=foo
  • /foo - >/?version=&domain=foo
  • /v/foo - >/?version=&domain=foo
+0

當我嘗試我得到一個內部服務器錯誤。 –

+0

@ChristopherMartin忘記了它會循環使用,在規則前面添加'RewriteCond%{QUERY_STRING}!version ='(與HTTP_HOST條件一起) –

+0

謝謝!這就像一個魅力。我不確定發生了什麼事。我認爲將整個第一部分分組並將其設置爲可選將是可行的。爲什麼它會給我一個500服務器錯誤?你介意解釋嗎? –

相關問題