Я пытаюсь настроить lighttpd так, чтобы:

  • www.domain1.org/admin использует config1
  • любой другой URL на www.domain1.org использует config2
  • любой URL на www.domain2.org использует config2

Таким образом, в основном, domain1 и domain2 должны использовать одну и ту же конфигурацию, за исключением случаев, когда доступ к domain1 осуществляется через URL-адрес, который начинается с / admin.

Я пробовал пока несколько вариантов, в том числе этот:

$HTTP["host"] =~ "domain1.org" {
  $HTTP["url"] =~ "^/admin" {
    // config1

    alias.url = ("/media/admin" => "/usr/share...",
                 "/static" => "/var/www/...")

    url.rewrite-once = (
      "^(/media/admin.*)$" => "$1",
      "^(/static.*)$" => "$1",
      "^/favicon\.ico$" => "/media/favicon.ico",
      "^(/.*)$" => "/application.fcgi$1",
    )
    server.document-root="/var/www/application"
    fastcgi.debug = 1

    fastcgi.server = (
      "/application.fcgi" => (
          "main" => (
              "socket" => "/var/www/application/application.sock",
              "check-local" => "disable",
          )
      ),
    )

  } else $HTTP["url"] !~ "^/admin" {
    // config2
  }

$HTTP["host"] !~ "domain1.org" {
   // config2
}

Но несмотря ни на что, доступ к domain1.org/admin дает ошибку 404.

Что-то мне не хватает?

answer

См. Http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModRewrite :

NOTE: url rewriting does not work within a $HTTP["url"] conditional.

Кроме того, при перезаписи всегда должен использоваться абсолютный путь, поэтому вы должны ставить перед совпадениями префикс / admin, а также цели и совпадения fastcgi.server.