【问题标题】:phalcon php "invo sample application" using nginx使用 nginx 的 phalcon php “invo 示例应用程序”
【发布时间】:2014-03-02 05:10:55
【问题描述】:

我尝试通过测试INVO sample application来学习和配置phalcon

该教程似乎没有包含用于测试的 nginx 配置,因此我在测试示例应用程序时遇到了一些困难。

我使用nginx作为web服务器,我从here获取了nginx配置

这是我的 nginx 配置:

server {

    listen   80;
    server_name local.phalcon.dev;

    access_log /Users/mylocal/www/log/phalcon.access.log;
    error_log /Users/mylocal/www/log/phalcon.error.log;

    index index.php index.html index.htm;
    set $root_path '/Users/mylocal/www/phalcon/current';
    root $root_path;

    try_files $uri $uri/ @rewrite;

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

    location ~ \.php {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index /index.php;

        include /usr/local/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;
    }
}

看教程,相信结构是这样的:

webroot
    invo
        app
            ...
        public
            index.php
            ...
        ...

也就是说,webroot 是我的/Users/mylocal/www/phalcon/current

我应该可以通过这个网址http://local.phalcon.dev/invo访问它

这导致 403 被禁止,这是可以理解的,因为我们似乎应该将路径从 webroot/invo 重写为 webroot/invo/public

我在更改配置时做了一些试验和错误,但没有运气,有人可以帮我为该教程配置 nginx 配置吗? (这意味着从http://local.phalcon.dev/invo 访问它)

PS:

我可以通过将$root_path 更改为/Users/mylocal/www/phalcon/current/invoice/public 来访问它

invo/public/index.php 中将$url->setBaseUri($config->application->baseUri); 更改为$url->setBaseUri('/');

但这意味着我是从网址http://local.phalcon.dev而不是http://local.phalcon.dev/invo访问的

【问题讨论】:

  • 那么……你明白了吗?
  • @IanBytchek 还没有,我想从http://local.phalcon.dev/invo 访问它。我只能从http://local.phalcon.dev 访问它,这不是我想要的

标签: php nginx phalcon


【解决方案1】:

要通过http://local.phalcon.dev/invo 而不是http://local.phalcon.dev 访问它,您现在需要做的就是configure the routing。我认为在您的情况下,您只需要按照this example 设置基本 uri:

//Setup a base URI so that all generated URIs include the "tutorial" folder
$di->set('url', function(){
    $url = new \Phalcon\Mvc\Url();
    $url->setBaseUri('/tutorial/');
    return $url;
});

我也感觉到您也想将http://local.phalcon.dev 用于其他 Phalcon 应用程序?如果是这样的话,那它就行不通了。所有请求都被转发到 index.php,它排除了要做什么。你可以创建multi-module app,但你不能在同一个域上拥有不同的应用程序(没有严重的痛苦)。

【讨论】:

  • 其实我只是想学习一下,在我的情况下如何为phalcon配置nginx(仅用于学习目的)。你提到的那个教程是同样的问题,它没有路由到正确的路径。所以,我想在不更改我的 web 文件(php 文件)的情况下配置我的 nginx 以正常工作。我用 Apache 尝试过,当然 .htaccess 正确重定向了路由
  • 我正在使用 nginx——它工作得非常好。我认为问题是示例,它似乎已经过时并且不能开箱即用。我刚刚在本地尝试过,稍微调整一下就可以了,但是使用 /invo/ 作为基本路径需要一些调整。为了实现这一点,我将从阅读路由开始。
  • cmets 中的代码乱码。这是索引的gist。你可以尝试去invo.local/some_path 并实现你想要的。我希望。 :)
【解决方案2】:

应该通过 url 访问的唯一目录是 public。您的家庭目录必须以 public 结尾,例如:

/Users/mylocal/www/phalcon/public

您将能够使用 /: 的基本目录

$di->set('url', function(){
    $url = new \Phalcon\Mvc\Url();
    $url->setBaseUri('/');
    return $url;
});

当然,你可以为你的公共目录使用任何名称,但不推荐,因为如果你想使用 phalcon 的 devtools,它们正在使用名为“public”的主目录

【讨论】:

  • 这不是他做的吗? (PS:我可以通过将 $root_path 更改为 /Users/mylocal/www/phalcon/current/invoice/public 来访问它)
  • 但你是对的,问题在于config file。将其设置为“/”有效。但它无法通过 /invo 访问——我得到了损坏的资产 URL。
  • 它适用于 Apache,我认为必须有某种方法可以在不更改任何文件的情况下为该教程正确配置 nginx
  • 您是否尝试过遵循本教程:docs.phalconphp.com/en/latest/reference/… 也许您应该尝试为简单的 hello world 示例配置您的服务器,然后将其展开为 invo
【解决方案3】:

请检查 app/config/config.ini 文件。有一个“baseUri”部分。
1. nginx root_path 应该是“webroot/invo/public.
2. phalcon 代码:app/config/config.ini -> baseUri = /
3. 网址:local.phalcon.dev

【讨论】:

  • 看到我的问题的结尾,我想从http://local.phalcon.dev/invo访问它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
相关资源
最近更新 更多