1
我拉出我的頭髮試圖獲得以下安裝在自己的機器上的Heroku和工作:如何通過相同的PHP文件提供來自子路徑的所有請求?
- 主網頁是駐留在文檔根
- 有
root/api
下一個API PHP文件。所有到/api/*
的請求應該被轉發到它的網關文件(api/index.php
)。
本地我得到了這個工作與不同的conf文件(下面),但在Heroku上沒有任何工作正常。我能找到的最好的是:
location/{
try_files $uri $uri/ /index.php?$query_string;
index index.php;
}
location ~ ^/api/(.+) {
try_files /api/index.php /api/index.php;
}
location ~ \.php(/|$) {
try_files @heroku-fcgi @heroku-fcgi;
}
如果我嘗試使用重寫,它會抱怨無限循環。如果我嘗試將網關腳本設置爲index
並使用try_files
及其FCGI位置,則會得到404 - 因爲除了該腳本以外,/api
文件夾下沒有任何內容。
使用try_files
並直接指向腳本使Heroku直接發送.php文件下載,而不是解釋它。我怎樣才能解釋,並仍然覆蓋所有其他/api/*
請求?
的conf文件我的本地機器上工作:
server {
listen 80;
server_name devshop.dev;
index index.php;
root /home/myself/dev/developer-shop/www/;
location ~ ^/api(/|$) {
try_files $uri $uri/ /api/index.php;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
}
location ~ \.php(/|$) {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
}
}