我正在嘗試為我的 Web 應用程式設定 nginx Web 伺服器。
下面是我想要的網址
www.example.com -----> /var/www/html
www.example.com/backend/ -----> /var/www/app/backend/www
www.example.com/frontend/ -----> /var/www/app/frontend/www
我能夠獲取 /var/www/html 為 example.com 提供正確的 php 文件,但其他兩個我無法讓它們工作。
我的應用程式是基於 yii 構建的,我用它作為我的基礎https://github.com/clevertech/YiiBackboneBoilerplate
有一個重寫可以從 url 中刪除 index.php
當我訪問 www.example.com/backend 時,它會將我帶到 index.php,但我重寫了 url,使連結成為 www.example.com/backend/site/login
並在錯誤日誌中顯示如下
"/var/www/app/backend/www/site/login/index.php" is not found (2: No such file or directory), client: 114.143.183.171, server: example.com, request: "GET /backend/site/login/ HTTP/1.1", host: "example.com"
下面是我的會議的片段
set $yii_bootstrap "index.php";
location / {
root /var/www/html/;
index $yii_bootstrap;
}
location /backend {
alias /var/www/app/backend/www;
index $yii_bootstrap;
}
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(.*)$;
set $fsn /$yii_bootstrap;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
# connect to a unix domain-socket:
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
# This file is present on Debian systems..
include fastcgi_params;
}
請幫我解決這個問題嗎?我試著理解但找不到我錯在哪裡。
答案1
1 個請求 = 1 個位置
您將需要複製您的正規表示式位置,以便為您擁有的每個前綴位置找到一個。這是最有效的方法。
不要害怕複製貼上!配置中的這些額外位元組將使 nginx 配置更具可讀性、可擴展性和運行效率。
location / {
root /var/www/html;
location ~* \.php$ {
[...]
}
}
location /backend/ {
alias /var/www/html/backend/www/;
location ~* \.php$ {
[...]
}
}
location /frontend/ {
alias /var/www/html/frontend/www/;
location ~* \.php$ {
[...]
}
}