Web-Server

Lighttpd 拆分請求 URI 和刪除查詢參數

  • July 25, 2014

我正在執行 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 =
       (
           "^(.*)$" =&gt; "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 =
       (
           "^(.*)$" =&gt; "index.php/$1"
       )
}

我想如果你真的被迫使用 lighttpd <= 1.4.24你總是可以使用 mod_magnet 和 Lua。

引用自:https://serverfault.com/questions/614891