在nginx中重写和定位

时间:2015-12-07 11:50:18

标签: regex nginx rewrite

我目前面临一个非常奇怪的问题。

我有一个运行在xyz.com的网站,该网站植根于/var/www/xyz.com/。现在另外,我有一个应用程序的管理界面,它应该在xyz.com/admin上运行,并在/var/www/xyz.com/admin/中找到它的根目录。

但是,/ var / www / xid / admin /中的脚本要求将此目录精确地作为根目录运行(通过前面的斜杠进行相对寻址)。我不想改变脚本。现在问题在于:

  1. 如果我将/ admin /的根位置设置为/var/www/xyz.com/,则会正确调用管理页面,但脚本将无效。
  2. 如果我将/ admin /的根位置设置为/var/www/xyz.com/admin/,则无法寻址该页面(由于访问权限导致错误日志条目 尝试在/var/www/xyz.com/admin/admin/)。
  3. 如何使用我的nginx消除此问题(不修改管理脚本)?有人可以帮忙吗?

    编辑:我确实通过上游为主要位置" /"工作,所以没有选择只留下额外的块。

1 个答案:

答案 0 :(得分:0)

好的,我在这里可以看到两种解决方案。

首先是将root替换为alias http://nginx.org/en/docs/http/ngx_http_core_module.html#alias

location /admin/ {
     alias /var/www/xyz.com/admin/;
     ...
}

因此,在此示例中,$document_root位置/admin/位置/var/www/xyz.com/admin/

第二种解决方案(我不知道为什么,但是你会觉得它很有用)。 PHP如何了解文档根目录?使用DOCUMENT_ROOT fastcgi参数。在fastcgi.conf内,您可以看到字符串fastcgi_param DOCUMENT_ROOT $document_root;。此参数可以在您的配置中重新设置

location /admin/ {
     include fastcgi.conf;
     fastcgi_param DOCUMENT_ROOT /my/new/root/;
     ...
}

第一个解决方案要好得多,所以我放置第二个解决方案只是为了展示PHP中的文档根目录以及它是如何工作的。