2013-10-28 55 views
0

將apache .htaccess中看似簡單的重寫規則轉換爲lighttpd規則時遇到了一些麻煩。mod_rewrite apache to lighttpd規則

的apache的規則: RewriteRule (.*) index.php?baseURL=$1 [L,QSA]

本質上,在其全部的URL作爲baseURL參數傳遞,當然任何其他給定的參數被保留。

一個警告是,它應該只適用於單個目錄,並且(希望)不包括該目錄在baseURL

目前我有lighttpd的是:

url.rewrite-once = (
"^\/Folder\/(.*)" => "/Folder/index.php?baseURL=$0" 
) 

這得到整個URL,並將其作爲一個參數,包括\Folder\和參數,所以http://domain/Folder/test.php?someParam=1使得baseURL包含/Folder/test.php?someParam=1

我可以解析這在PHP中,並使其工作,但重點是在Apache和Lighttpd具有相同的PHP代碼。

回答

2

你有幾個問題。 $0是整個比賽,你想要$1引用第一個子比賽,(.*)。像這樣:

url.rewrite-once = (
    "^/Folder/(.*)" => "/Folder/index.php?baseURL=$1" 
) 

這仍然與查詢字符串的一個問題,它會產生兩個?秒。例如。

"/Folder/foo?bar=1" => "/Folder/index.php?baseURL=foo?bar=1" 

最終的解決方案:

url.rewrite-once = (
    # Match when there are no query variables 
    "^/Folder/([^\?]*)$" => "/Folder/index.php?baseURL=$1", 
    # Match query variables and append with & 
    "^/Folder/([^\?]*)\?(.*)$" => "/Folder/index.php?baseURL=$1&$2", 
) 
+0

第二''會得到適當的編碼解碼。這就是爲什麼OP在接收'/Folder/test.php?someParam = 1'作爲'baseURL'值時沒有問題。 –

+0

啊,好的。我現在得到你的解決方案。這就是'QSA'如何工作,所以你是正確的。 +1 –

+0

@RaviThapliyal什麼是[QSA]? – Macattack