簡體   English   中英

NGINX問題與PHP框架的Subdir

[英]NGINX Problem with Subdir with PHP Framework

我有一個PHP框架,其中包含以下文件夾:

/index.php : front controller
/controllers/* : page controllers
/models/* : models
/views/* : views

我設置了NGINX規則,以便在找不到顯式文件或文件夾路徑的情況下,將請求重寫為index.php。 我這樣做:

location / {
    try_files $uri $uri/ @php;
}

location @php {
    rewrite ^/(.*)$ /index.php?$1 last;
}

一切都很好,直到我想將此框架重復到一個單獨的Web應用程序的名為“ keys”的子目錄中為止。 現在發生的是,如果我調用https://example.com/keys/ ,它將調用/home/example.com/www/keys/index.php,這是正確的,因為它是子目錄的前端控制器,而不是父文件夾(/home/example.com/www/index.php)的前端控制器。 但是問題是,如果我調用/ keys / login,它應該將此請求發送到keys / index.php前端控制器。 而是將請求發送到/index.php(root前端控制器)。 如何解決此問題,以便對包含子目錄的路徑的請求將調用該子目錄的適當前端控制器?

在您的location @php塊中添加另一個重寫規則,使其看起來像這樣:

location @php {
    rewrite ^/keys/(.*)$ /keys/index.php?$1 last;
    rewrite ^/(.*)$ /index.php?$1 last;
}

last指令說運行該規則,並停止在該塊中進行進一步的重寫。 因此,當您檢測到帶有/keys/起始文件夾路徑的URL時,您將進行攔截並將其發送到適當的前端控制器文件,否則將請求發送到根前端控制器文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM