Web-Server
Lighttpd 拆分請求 URI 和刪除查詢參數
我正在執行 lighttpd 1.4.33,它是從對 Internet 開放的 Apache 伺服器反向代理的。當從 lighttpd 伺服器的本地地址訪問腳本時,將 GET 參數傳遞給腳本就好了,我得到了預期的結果。但是,當通過代理訪問腳本時(並由以下 lighttpd 規則重寫),查詢參數似乎被完全刪除。
似乎導致問題的重寫規則:
$HTTP["host"] =~ "^site\.example\.com$" { # This affects the requests that aren't rewritten below, ie. static stuff server.document-root = "/var/www/example/public" url.rewrite-once = ( "^((?!assets).)*$" => "index.php/$1" ) }
這應該重寫所有 URL,以便它們通過 index.php 中的路由引擎傳遞,除了
/assets
目錄中的靜態內容,它們應該只是靜態提供。請注意,這/assets
是 的子目錄/var/www/example/public
,因此可以正常工作。帶有已刪除參數的請求的 Lighttpd 調試日誌:
2014-07-23 11:36:46: (response.c.310) Request-URI : /foo/bar?someparam=data 2014-07-23 11:36:46: (response.c.311) URI-scheme : http 2014-07-23 11:36:46: (response.c.312) URI-authority: site.example.com 2014-07-23 11:36:46: (response.c.313) URI-path : /foo/bar 2014-07-23 11:36:46: (response.c.314) URI-query : someparam=data 2014-07-23 11:36:46: (response.c.309) -- splitting Request-URI 2014-07-23 11:36:46: (response.c.310) Request-URI : index.php/a 2014-07-23 11:36:46: (response.c.311) URI-scheme : http 2014-07-23 11:36:46: (response.c.312) URI-authority: site.example.com 2014-07-23 11:36:46: (response.c.313) URI-path : index.php/a 2014-07-23 11:36:46: (response.c.314) URI-query :
注意最後一行的空白
URI-query
欄位。似乎“拆分請求 URI”的步驟正在破壞一切。關於可能導致這種情況的任何想法?
事實證明,在 lighttpd >= 上有一種更簡單的方法可以做到這一點
1.4.24
。您可以使用該url.rewrite-if-not-file
指令,如下所示(lighttpd <=1.4.33
):$HTTP["host"] =~ "^site\.example\.com$" { # Rewrite all requests to non-physical files url.rewrite-if-not-file = ( "^(.*)$" => "index.php/$1" ) }
該範例使用該
$HTTP["host"]
指令,因為$HTTP["url"]
直到1.4.34
. 在 lighttpd >=1.4.34
中,您可以在 URL 條件塊中使用它:$HTTP["url"] =~ "^\/site/$" { # Rewrite all requests to non-physical files url.rewrite-if-not-file = ( "^(.*)$" => "index.php/$1" ) }
我想如果你真的被迫使用 lighttpd <=
1.4.24
,你總是可以使用 mod_magnet 和 Lua。