Skip to main content
 首页 » 编程设计

NGINX try_files + alias 指令

2024年09月07日19tuyile006

我正在尝试使用 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; 
        } 
    } 
} 

我收到了类似的请求

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; 
        } 
    } 
} 

给我来自/home/alex/www/test2/的 index.html 文件。
请给我一个线索 - 为什么?我怎样才能强制 NGINX 处理/home/alex/www/test1/index.php 呢?

请您参考如下方法:

这是 a long standing bug in 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; 
    } 
}