Я использую lighttpd 1.4.33, который обратно проксируется с сервера 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.