2016-09-16 83 views
0
<Directory /var/www/html/api/> 
     RewriteEngine on 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^([^/]*)(.*)$ index.php?version=$1&method=$2&param1=$3&param2=$4&param3=$5 
</Directory> 

以下網址:http://myserver.com/api/v1/hello/there/stranger阿帕奇重寫規則不拆分變量進入查詢字符串

array(5) { ["version"]=> string(2) "v1" ["method"]=> string(21) "/hello/there/stranger" ["param1"]=> string(0) "" ["param2"]=> string(0) "" ["param3"]=> string(0) "" } 

版本字符串分割正確,但該方法的字符串似乎採取的其餘內容,並把它變成一個字符串而不是將它分成param1,param2和param3這是我的目標。

如何「重寫」RewriteRule,以便它將這些變量正確地分割爲匹配的查詢字符串?

回答

1

這不是分裂,因爲你的正則表達式並沒有把它分成多個組。

您的正則表達式正在捕獲(.*)v1/它將只捕獲/hello/there/stranger在一個組中。

您可以使用這些不同的規則:

# 2 parts 
RewriteRule ^([^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2 [L,QSA] 

# 3 parts 
RewriteRule ^([^/]+)(/[^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2&param1=$3 [L,QSA] 

# 4 parts 
RewriteRule ^([^/]+)(/[^/]+)(/[^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2&param1=$3&param2=$4 [L,QSA] 

# 5 parts 
RewriteRule ^([^/]+)(/[^/]+)(/[^/]+)(/[^/]+)(/[^/]+)/?$ index.php?version=$1&method=$2&param1=$3&param2=$4&param3=$54 [L,QSA] 
+0

這似乎已經打破了原有的重寫規則是將請求路由到index.php。任何想法爲什麼? – jskidd3

+0

當URL中沒有提供足夠的參數時,問題似乎就會發生。請你可以改變你的答案,以便你不必提供所有的參數,以便index.php路線工作? – jskidd3

+0

它可以完成,但是當所有參數都不存在時,我將需要所有情況下的示例URL。 – anubhava