2015-10-12 141 views
2

我想創建沿着這些線路 http://example.com/secretkey/username/apifunction/data_in/URL與多個參數

,並與下面的URL重寫規則乾淨的URL,它似乎做工精細

RewriteRule ^/?([^-]+)/([^-]+)/([^-]+)/([^-]+)/?$ /api.php?Key=$1&user=$2&funct=$3&request=$4 [L,QSA] 

爲我從URL重寫測試器獲得以下輸出確認。然而

http://example.com/api.php?Key=secretkey&user=username&funct=apifunction&request=data_in 

地方出現下跌結束了,我很努力理解的部分是,如果我把一個額外的/ MOREDATA /上的所有散花網址的結尾。而url重寫測試儀顯示我的網址現在返回如下。

http://example.com/api.php?Key=secretkey/username&user=apifunction&funct=data_in&request=moredata/ 

在我要去的地方錯了任何建議,將不勝感激,在我重寫任何突出的錯誤(這是所有新的給我)。

回答

1

[^-]+意味着匹配,直到找到下一個-或行結束。但在你的情況下,你實際上匹配由/分隔的URL組件。

試試這個代碼,而不是:

RewriteEngine On 
RewriteBase /apitest/ 

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ api.php?Key=$1&user=$2&funct=$3&request=$4 [L,QSA] 
+0

我剛剛發佈,我想知道,如果它涉及到嘗試過這條規則 - 在'[^ - ]',但是當我嘗試這個時,規則不再匹配。 – Kristiaan

+0

不是真的,這是.htaccess文件 ' RewriteEngine On RewriteRule ^([^ /] +)/([^ /] +)/( [^ /] +)/?$ /apitest/api.php?Key=$1&user=$2&funct=$3&request=$4 [L,QSA] ' 該頁面位於'http:// localhost/apitest/secretkey/username/apifunction/data_in/moredata /' – Kristiaan

+0

當我嘗試撥打該頁面時出現以下錯誤: '在此未找到請求的URL/apitest/secretkey/username/apifunction/data_in/moredata /服務器「。 – Kristiaan

0

有正在創建此行爲兩個關鍵的東西:

  1. 你的正則表達式的分組是([^-]+)這意味着:「匹配除了一個-字符什麼」
  2. 默認情況下,正則表達式匹配是貪婪的,這意味着它將盡可能匹配。

這意味着您的第一個分組與兩個路徑元素以及/都匹配。如果你真的想除了-字符相匹配的一切,然後包括在所有這些的/但結束:

RewriteRule ^/?([^-/]+)/([^-/]+)/([^-/]+)/([^-]+)/?$ /api.php?Key=$1&user=$2&funct=$3&request=$4 [L,QSA] 
+0

正則表達式來自我一直在閱讀url重寫的教程(因爲正則表達式是我正在閱讀的另一部分,以獲得此工作)。我不需要排除URL中的 - 字符,理想情況下我需要匹配每個/之間的所有內容, – Kristiaan