Nginx

子目錄中的 Nginx 和 PHP

  • January 20, 2022

我在 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

謝謝你的耐心!

/blogURI 的第一個組件一樣,您需要將其從root. root /path/to/my在裡面使用location ^~ /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;
   }
}

有關詳細資訊,請參閱此文件

最後,網站的其餘部分可以使用正常位置,例如您location /^~修飾符location ^~ /blog為任何以 . 開頭的 URI 賦予優先級/blog。有關詳細資訊,請參閱我的第二個參考。

引用自:https://serverfault.com/questions/778329