簡體   English   中英

沒有斜杠的nginx目錄

[英]nginx directories without slash

我有這個配置的nginx + phpfpm + phpmyadmin:

root /var/www/utils;

location ~ ^/phpmyadmin/.*\.(jpg|jpeg|gif|png|css|js|ico)$ {
    root           /var/www/utils;
}

location = /phpmyadmin {
    index index.php;
}

location ~ ^/phpmyadmin.*(\.php|)$ {
    index          index.php;
    fastcgi_index  index.php;
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

一切都很好,但如果我刪除“location = / phpmyadmin”,我會在_http:// server / phpmyadmin上收到403錯誤。

如何訪問所有子目錄,例如_http:// server / phpmyadmin / setup?

我得到“訪問腳本'/ var / www / utils / phpmyadmin / setup'已被拒絕 - 在每個目錄上都沒有斜線,如果我沒有為每個目錄編寫特殊配置。

nginx文檔中所述

$ fastcgi_script_name變量獲取傳入請求URI的值, 如果URI以斜杠結束 ,則$ fastcgi_script_name附加使用fastcgi_index指令定義的內容。

因此,如果您的請求是“/ phpmyadmin / setup /”並且fastcgi_index設置為“index.php”,則$ fastcgi_script_name變量將為“/phpmyadmin/setup/index.php”。 因此$ document_root加$ fastcgi_script_name將是“/var/www/utils/phpmyadmin/setup/index.php”,這應該可以正常工作。

但是如果你發出像“/ phpmyadmin / setup”這樣的請求(最后沒有斜線),那么$ fastcgi_script_name將不會被fastcgi_index附加,即它只是“/ phpmyadmin / setup”。 並且$ document_root加上$ fastcgi_script_name將是“/ var / www / utils / phpmyadmin / setup”,由於沒有這樣的文件,因此無效。

您應該使用帶有斜杠的URI,或者定義一個重寫規則(在“服務器”配置塊中),這將為不以某些擴展名結尾的URI添加斜杠(以便像“/ phpmyadmin / myscript”這樣的URI。 php“不會轉換成”/phpmyadmin/myscript.php/“。它應該是這樣的:

rewrite ^([^\.]*[^\/])$ $1/ break;

但是,我沒有測試過自己。

暫無
暫無

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

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