假設一個網站有這個檔案夾結構
/index.php
/<public>
dikpic.jpeg
當有人訪問該網站時,我希望物理網路根指向/public,例如mywebsite.com/dikpic.jpeg
(沒有 url 重寫)。
這可以通過root /myuser/public;命令來實作。
但我也想從這個目錄之外加載 index.php 檔案:
index /myuser/index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~* \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm-myuser.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
問題在于位置 try files 塊假定/為 web root :(
有什么辦法解決這個問題嗎?
我還應該指出 index.php 是網站上唯一的腳本。所以我真的不在乎是否有任何其他對 .php 檔案的請求被忽略。index.php 處理 url 重寫的東西......
uj5u.com熱心網友回復:
您可以在此處創建 index.php 的符號鏈接,這是如何做到的。
因此,您的所有網站都將擁有一個 index.php
uj5u.com熱心網友回復:
您可以location為此使用額外的塊,盡管它對我來說似乎不是一個優雅的解決方案:
location ~* \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm-myuser.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location = /index.php {
fastcgi_pass unix:/run/php/php7.4-fpm-myuser.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /full/path/to/your/index.php;
fastcgi_param SCRIPT_NAME /index.php;
}
精確匹配的位置優先于正則運算式匹配的位置,因此第一個塊將用于除 .php 檔案之外的任何 PHP 檔案請求/index.php。您甚至不需要為第二個位置定義根,設定正確的SCRIPT_FILENAMEFastCGI 引數值就足夠了。
更新
我沒有注意到你問題的最后一句話,但如果你不關心任何其他 PHP 檔案,那么只有第二個塊location = /index.php { ... }就足夠了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345963.html
