子文件夹中的 nginx 站点

子文件夹中的 nginx 站点

我在按自己想要的方式设置 nginx 时遇到了一些麻烦。我有一个位于 /vagrant/frontend/www 的站点 example.localhost。我的配置可以正常工作,如下所示:

server {
    listen 80;
    server_name example.localhost;

    root /vagrant/frontend/www;
    index index.php;

    location / {
        try_files   $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass 127.0.0.1:9000;
    }
}

但后来我想在 example.localhost/admin 的地址中添加一个位于 /vagrant/backend/www 的管理站点。我的设置如下:

location /admin {
    alias /vagrant/backend/www/;
    try_files   $uri $uri/ /index.php?$args;

    location ~ \.php$ {
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass 127.0.0.1:9000;
    }
}

对“example.localhost/admin”的请求已被处理,但是当 URL 看起来像“example.localhost/admin/site/index”时,看起来 /admin 位置不匹配,因为该请求是在前端处理的...

我已经被这个问题困扰好几天了,任何帮助我都会非常感激!

答案1

当 URL 看起来像“example.localhost/admin/site/index”时

如果你没有文件,/var/backend/www/site/index你的try_files指令最后一项将进行内部重定向/index.php,由外部处理location ~ \.php$

在此配置中,我嵌套了 PHP 的位置,并修复了try_files/admin/重定向到的位置/admin/index.php

server {
    listen 80;
    server_name example.localhost;

    root /vagrant/frontend/www;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php;

        location ~ \.php$ {
            include fastcgi.conf;
            fastcgi_pass 127.0.0.1:9000;
        }
    }

    location /admin {
        return 301 /admin/;
    }

    location /admin/ {
        alias /vagrant/backend/www/;

        try_files $uri $uri/ /admin/index.php;

        location ~ \.php$ {
            include fastcgi.conf;
            fastcgi_pass 127.0.0.1:9000;
        }
    }
}

相关内容