[英]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.