我正在尝试使用php代码向站点的/ blog子目录提供请求,该代码位于文档根目录之外的文件夹中.这是我的主机配置:
server {
server_name local.test.ru;
root /home/alex/www/test2;
location /blog {
alias /home/alex/www/test1;
try_files $uri $uri/ /index.php$is_args$args;
location ~ \.php$ {
fastcgi_split_path_info ^(/blog)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的请求就像
wget -O - http://local.test.ru/blog/nonExisting
只是来自/ home/alex/www/test2 /文件夹的index.php文件的代码.
但是,这个配置:
server {
server_name local.test.ru;
root /home/alex/www/test2;
location /blog {
alias /home/alex/www/test1;
try_files $uri $uri/ /blog$is_args$args;
index index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(/blog)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}
}
Run Code Online (Sandbox Code Playgroud)
从/ home/alex/www/test2 /给我index.html文件.请给我一个线索 - 为什么?我怎样才能强制NGINX处理/home/alex/www/test1/index.php呢?
Mot*_*tin 28
我们无法通过在位置块中指定root来使其工作.我们的解决方案是使用别名.请注意,必须在try_files指令中重复两次位置的路径,然后在.php配置块中重复:
server {
server_name localhost;
root /app/frontend/www;
location /backend/ {
alias /app/backend/www/;
# serve static files direct + allow friendly urls
# Note: The seemingly weird syntax is due to a long-standing bug in nginx: https://trac.nginx.org/nginx/ticket/97
try_files $uri $uri/ /backend//backend/index.php?$args;
location ~ /backend/.+\.php$ {
include fastcgi_params;
fastcgi_buffers 256 4k;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param HTTPS $proxied_https;
fastcgi_pass phpfiles;
}
} # / location
}
Run Code Online (Sandbox Code Playgroud)
来源:nginx的/ conf.d/app.conf从Debian的PHP-nginx的堆在泊坞窗堆栈项目
Fle*_*der 22
这是nginx中一个长期存在的错误.但是你可以root再次使用该指令来解决.有点黑客,但至少它有效.
server {
index index.php;
root /home/alex/www/test2;
server_name local.test.ru;
location /blog {
root /home/alex/www/test1;
try_files $uri $uri/ /blog$is_args$args;
}
}
Run Code Online (Sandbox Code Playgroud)
还有另一种解决方法可以提供更大的灵活性。它由proxy_pass指向127.0.0.1 的指令和另一个server块组成。
在您的情况下,它应如下所示:
upstream blog.fake {
server 127.0.0.1;
}
server {
server_name local.test.ru;
root /home/alex/www/test2;
index index.html;
location /blog {
proxy_pass http://blog.fake/;
}
}
server {
server_name blog.fake;
root /home/alex/www/test1;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22897 次 |
| 最近记录: |