2015-04-02 113 views
0

我不明白爲什麼mvc路由不工作。路由器不能正常工作(Heroku + Nginx + PHP Phalcon)

當我訪問主頁時,加載了所有的CSS和js。

"GET /css/main.css HTTP/1.1" 304 

但是,當我訪問任何其他控制器,我得到:

method=GET path="/transaction/add" 
[error] open() "/app/public/transaction/add" failed (2: No such file or directory) 
"GET /transaction/add HTTP/1.1" 404 

這裏是我的procfile

--Procfile-- 
web: vendor/bin/heroku-php-nginx public/ 

location/{ 
    # try to serve file directly, fallback to rewrite 
    try_files $uri @rewriteapp; 
} 

location @rewriteapp { 
    # rewrite all to app.php 
    rewrite ^(.*)$ /index.php/$1 last; 
} 

location ~ ^/(app|app_dev|config)\.php(/|$) { 
    try_files @heroku-fcgi @heroku-fcgi; 
    internal; 
} 

我真的失去了這裏。

+0

對不起,我使用Apache,但是這似乎是矛盾的:#重寫所有的應用程序。 PHP VS重寫^(。*)$ /index.php/$1 last;您可以嘗試使用app.php而不是index.php,否則使用public/index.php – KyleK

+0

@KyleK,只是爲了更新我已經做了一些修改,但還沒有。 – Pablo

回答

0

嘗試按照說明文檔中:http://docs.phalconphp.com/fr/latest/reference/nginx.html

server { 

    listen 80; 
    server_name localhost.dev; 

    index index.php index.html index.htm; 
    set $root_path '/var/www/phalcon/public'; 
    root $root_path; 

    try_files $uri $uri/ @rewrite; 

    location @rewrite { 
     rewrite ^/(.*)$ /index.php?_url=/$1; 
    } 

    location ~ \.php { 
     fastcgi_pass unix:/run/php-fpm/php-fpm.sock; 
     fastcgi_index /index.php; 

     include /etc/nginx/fastcgi_params; 

     fastcgi_split_path_info  ^(.+\.php)(/.+)$; 
     fastcgi_param PATH_INFO  $fastcgi_path_info; 
     fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 

    location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { 
     root $root_path; 
    } 

    location ~ /\.ht { 
     deny all; 
    } 
} 
+0

我做了,我得到了「Mod-Rewrite not enabled。Please enable rewrite urls on your web server to continue」。那是我的第一個問題。任何想法? – Pablo

+0

什麼是你的路徑(而不是/ var/www/phalcon/public)並且它包含index.php? – KyleK

+0

我執行過「heroku運行bash」,我看到路徑是「app/public」,裏面有index.php。只是要清楚我可以得到的應用程序文件夾最大根目錄,沒有文件夾裏面的項目命名。 – Pablo

0

這應該工作:

location/{ 
    # try to serve file directly, fallback to rewrite 
    try_files $uri @rewriteapp; 
} 

location @rewriteapp { 
    # rewrite all to app.php 
    rewrite ^(.*)$ /index.php/$1 last; 
} 

location ~ ^/index\.php(/|$) { 
    try_files @heroku-fcgi @heroku-fcgi; 
    internal; 
} 
+0

不幸的是我已經試過這個,但我沒有成功。也許問題是Procfile沒有讀取我的/public/index.php,但還不確定。 – Pablo