4

我在让 mod_proxy 正确地将流量转发到在同一台机器上为预定义子文件夹运行的不同网络服务器时遇到问题。理想情况下,domain.com/docs 应该转发到 127.0.0.1:3000,所有其他流量都应该保留在 domain.com 上。此处的重写规则适用于在 domain.com 上运行的 wordpress 安装:

$HTTP["host"] =~ "(^|\.)domain\.com" {
 $HTTP["url"] =~ "^/docs" {
  proxy.server  = ( "" => (( "host" => "127.0.0.1", "port" => 3000 )))
 } 
 $HTTP["url"] !~ "^/docs/(.*)" {
  url.rewrite = (
   "^/(.*)\.(.+)$" => "$0",
   "^/wp/(.*)$" => "$0",
   "^/(.+)/?$" => "/index.php/$1"
  )
  server.document-root = "/mnt/webroot/html"
 }
}

我已经有一段时间反对这个了,所以欢迎任何建议。

4

1 回答 1

2

我最终找出了导致它无法像我预期的那样工作的问题。

lighttpd 的 rewrite mod 的工作方式是在评估 $HTTP["url"] 条件之前评估所有 url.rewrite 命令,这意味着放置在 $HTTP["url"] 条件中的任何 url.rewrite 命令都将无效.

由于此限制,我无法为我正在寻找的实现找到一个好的解决方案,而是最终将一些重写向下游推送到我正在代理流量的另一台服务器(在本例中为节点)。

这在 lighttpd 的ModRewrite文档中用这一行粗略地引用:

NOTE: url rewriting does not work within a $HTTP["url"] conditional.
于 2012-09-25T19:15:20.483 回答