Nginx
子目錄中的 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
謝謝你的耐心!
與
/blog
URI 的第一個組件一樣,您需要將其從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
。有關詳細資訊,請參閱我的第二個參考。