Silex子目录路由后面的nginx + lighttpd +重写

时间:2015-08-18 16:02:31

标签: nginx routing reverse-proxy lighttpd silex

我有以下设置:一个lighttpd服务器,带有mod_fcgi for PHP,后面是一个充当反向代理的nginx服务器。 lighttpd根目录映射到" my-tool" nginx的子目录。我可以在lighttpd配置中添加重写规则,但不能触摸nginx。

我在lighttpd conf中定义了以下规则:

url.rewrite-once += (
    "^/my-tool(/[^\?]*)(\?.*)?" => "/index.php$1$2"
)

当我在浏览器中请求路径http://example.com/my-tool/bar时,Silex会抛出NotFoundHttpException,因为它无法找到/my-tool/bar - 但请求的路由应为/bar

删除/my-tool前缀的最佳/最标准方法是什么?我可以在lighttpd配置中执行此操作吗?我是否必须将Symfony\Component\HttpFoundation\Request子类化为$_SERVER['PATH_INFO']中的getInfoPath?或者我使用"脏黑客"并在初始化Silex之前将其从$_SERVER['HTTP_X_ORIGINAL_URI']变量中删除?

以下是$_SERVER的相关变量:

[ORIG_PATH_TRANSLATED] => /data/project/my-tool/public_html/bar
[ORIG_SCRIPT_FILENAME] => /data/project/my-tool/public_html/index.php/bar
[HTTP_X_ORIGINAL_URI] => /my-tool/bar
[REDIRECT_URI] => /index.php/bar
[REQUEST_URI] => /my-tool/bar
[DOCUMENT_ROOT] => /data/project/my-tool/public_html
[SCRIPT_FILENAME] => /data/project/my-tool/public_html/index.php
[PATH_TRANSLATED] => /data/project/my-tool/public_html/bar
[PATH_INFO] => /bar
[SCRIPT_NAME] => /index.php
[PHP_SELF] => /index.php/bar

1 个答案:

答案 0 :(得分:0)

您需要在相对网址端包含index.php的完整路径,例如:

url.rewrite-once += (
  "^/my-tool(/.*)" => "/my-tool/index.php$1"
)