子目录中的 Nginx 和 PHP

子目录中的 Nginx 和 PHP

我有一个基于 nginx 的应用程序。但我需要此应用程序中的特定路径重定向到 Wordpress 博客

例子 :

example.com/------->重定向到我的应用程序

example.com/whatever/ -------> 也重定向到我的应用程序

example.com/blog/------->重定向到我的 Wordpress 博客

因此,我添加了一个与该子路径匹配的位置

server {
        listen 80 default_server;

        index index.php;

        server_name _;

        location ^~ /blog {
                root /path/to/my/blog;
                index index.php index.html;

                location ^~ /blog/(.*\.php)$ {
                   fastcgi_pass   127.0.0.1:9000;
                   fastcgi_index index.php;
                   fastcgi_param  SCRIPT_FILENAME  /path/to/my/blog/$fastcgi_script_name;
                   include fastcgi_params;
                }
        }

        location ~* /(.*) {
                #here the conf for the rest of the website
        }
}

当我尝试获取该页面时,日志中出现 404 错误:

2016/05/22 15:27:24 [error] 21759#0: *1 open() "/path/to/my/blog/blog/index.php" failed (2: No such file or directory), client: XX.XX.XX.XX, server: _, request: "GET /blog/index.php HTTP/1.1", host: "example.com"

与 /blog 重复。

我该如何修复这个问题?

编辑 :

现在我有这个(感谢理查德史密斯):

location ^~ /blog {
                root /path/to/my/;
                index index.php;
                try_files $uri $uri/ /blog/index.php;

                location ~ \.php$ {
                        try_files $uri =404;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_pass   127.0.0.1:9000;
                }
        }

但是现在,如果我尝试获取另一个文件(例如 toto.html),我会收到 index.php 事件

如果我更换

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

            try_files $uri $uri/;

我遇到了 404

2016/05/22 20:57:21 [error] 22621#0: *1 "/path/to/my/blog/toto.html/index.php" is not found (20: Not a directory), client: 84.98.248.33, server: _, request: "GET /blog/toto.html/ HTTP/1.1", host: "example.com"

在日志中

编辑2:

该文件存在并且目前,我赋予它 777 权限(我将在投入生产之前将其删除):

drwxrwxrwx  2 user group 4096 May 22 20:36 .
drwxr-xr-x 11 user group   4096 May 23 06:20 ..
-rwxrwxrwx  1 user group  126 May 22 13:30 index.php
-rwxrwxrwx  1 user group  102 May 22 10:25 old.index.html
-rwxrwxrwx  1 user group   12 May 22 12:24 toto.html

感谢您的耐心!

答案1

由于/blog是 URI 的第一个组件,因此需要将其从 中删除。在 内部时root使用。root /path/to/mylocation ^~ /blog

这个文件了解详情。

另外,您的.php位置语法无效。您可以使用类似这样的语法:

location ^~ /blog {
    root /path/to/my;
    index index.php;
    try_files $uri $uri/ /blog/index.php;

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass   127.0.0.1:9000;
    }
}

这个文件了解详情。

最后,网站的其余部分可以使用正常位置,例如, your 上的修饰符location /赋予它以 开头的任何 URI 的优先权。有关详细信息,请参阅我的第二个参考资料。^~location ^~ /blog/blog

答案2

我尝试了所有方法来运行子目录,但只有这个代码对我有用

location ^~ /eng{ 
 root      /var/www/example.com;
 index index.php;
 try_files $uri $uri/ /eng/index.php$is_args$args; 

location ~ \.php$ { 
 root      /var/www/example.com;
 include fastcgi_params;
 fastcgi_buffers 256 4k;
 fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 fastcgi_pass unix:/run/php-fpm/www.sock;
            }
   }

这将使你的子目录 wordpress 像 charm 一样工作,而不是 wo-login.php 重定向没有页面未找到错误。请注意,我没有将子目录放入root指令中,这就是使它正常工作而不会出现错误的原因

答案3

我需要这个来在子目录中安装 Matomo:

location ^~ /matomo {
alias /usr/share/matomo;
index index.php;
try_files $uri $uri/ /matomo/index.php;

location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_param HTTP_PROXY "";
    fastcgi_param SCRIPT_FILENAME /usr/share/$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_intercept_errors on;
    fastcgi_read_timeout 300;
    fastcgi_buffers 32 256k;
    fastcgi_buffer_size 512k;       
    # PHP socket location.
    fastcgi_pass 127.0.0.1:9000;
}

}

请注意,中的/usr/share而不是,我花了一段时间进行 tcpdumping 才弄清楚。/usr/share/matomoSCRIPT_FILENAME

相关内容