我正在尝试配置nginx。如果我输入http://localhost/dav
,则应使用index.php
指令中配置的root
(c:/ wt-nmp / www / app-dav / frontend / web)中的location /dav
脚本。但是当我调试nginx时,它仍然使用root
config中配置的server
。
在调试中它看起来像:
location /dav
并将root
设置为新值并更改为index.php?dav
location ~ \.php$
,但$document_root
仍然指向c:/wt-nmp/www/m24/web
,但我认为应该在location /dav
中更改,如第1点所述。我的问题是当我输入c:/wt-nmp/www/app-dav/frontend/web
时如何配置nginx以使用http://localhost/dav
中的脚本。
我认为这段代码应该是这样的:
root
从server
指令设置为.../m24/web
http://example.com/dav
时,指令location /dav
应该将root
更改为.../m24/app-dav/frontend/web
,并且应该执行该位置的php脚本。.../m24/web
的脚本仍在执行。为什么root
中的location /dav
指令不会更改$document_root
值。 $document_root
仍然指向.../m24/web
。我的配置中最重要的部分如下:
server {
...
root "c:/wt-nmp/www/m24/web";
index index.html index.htm index.php;
location /dav {
root "c:/wt-nmp/www/m24/app-dav/frontend/web";
# The $uri gets mangled by nginx, however Yii urlmanager requires REQUEST_URI to route
set $original_uri $uri?$args;
# Try the actual uri, then uri as a directory, then send it to yii
try_files $uri $uri/ /index.php?$args;
}
location / {
#set original_uri to use as the request_uri later on
#The $uri gets mangled by nginx, however Yii urlmanager requires REQUEST_URI to route
set $original_uri $uri?$args;
#Try the actual uri, then uri as a directory, then send it to yii
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php_farm;
include nginx.fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $original_uri;
}
}
答案 0 :(得分:0)
你应该有2个位置指令,一个用于/dav
下的php文件,另一个用于/dav
下的静态文件:
location ~ ^/dav/.*\.php$ {
root "c:/wt-nmp/www/app-dav/frontend";
try_files $uri =404;
include nginx.fastcgi.conf;
fastcgi_pass php_farm;
}
location ~ ^/dav/ {
root "c:/wt-nmp/www/app-dav/frontend";
}
这样文件将从c:/wt-nmp/www/app-dav/frontend/dav
提供。因此,您可能还需要rename c:/wt-nmp/www/app-dav/frontend/web c:/wt-nmp/www/app-dav/frontend/dav
,因为URL路径必须与根子目录匹配!
另外,请确保使用最新版本的WT-NMP - portable Nginx Mysql Php development stack for Windows`