我有以下设置:一个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
答案 0 :(得分:0)
您需要在相对网址端包含index.php
的完整路径,例如:
url.rewrite-once += (
"^/my-tool(/.*)" => "/my-tool/index.php$1"
)