我怎样才能让phalcon框架在现有的遗留php项目下共存?

时间:2015-11-19 04:49:57

标签: php nginx phalcon

我在nginx web服务器上运行一个基于php的网站(购物中心)。 最近我听说phalcon是一个非常快速可靠的框架,可以帮助开发人员加快开发过程。

所以我想把它实现到我的网站,作为特定服务的子模块开始,因为很难从头开始。

我想在/ var / www下创建一个子文件夹(让我们说“phalcontest”)。

我用Google搜索了这个主题,但是我在网上找到的所有内容(可能是?)都是将nginx服务器设置为phalcon项目的专用网站(我的意思是将“项目”文件夹设为网络根目录),没有任何关于使phalcon项目与旧的非phalcon页面共存。

我试过像这样的nginx配置,希望没关系:

 server {
     listen       80;
     root /var/www/;
     index index.html index.htm index.php;

     server_name localhost;

     access_log  /var/log/nginx/access.log main buffer=16k;
     error_log  /var/log/nginx/error.log;


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

 location / { 
         try_files $uri $uri/ /index.php?q=$uri&$args;
 }

 location ~ \.php$ {
  try_files      $uri = 404;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include        fastcgi_params;

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


location /phalcontest {
     try_files $uri $uri/ @rewrite;
}

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

 }

使“phalcontest”文件夹成为webroot下的启用phalcon的子文件夹。

之后我用phalcon devtools创建了phalcontest,

并访问http://localhost/phalcontest/public,显示:

  

恭喜!   你现在和Phalcon一起飞行。伟大的事情即将发生!   此页面位于views / index / index.phtml

但是当我访问http://localhost/phalcontest时,它会显示:

  

未启用Mod-Rewrite

     

请在您的网络服务器上启用重写模块以继续

这意味着我做错了什么,我只能通过公共文件夹访问,而不是文件夹本身。

请帮助我如何让phalcon与现有的基于php的网站一起使用!

1 个答案:

答案 0 :(得分:4)

Phalcon的工作方式是将所有针对您的Web根目录/的流量重写到/public/目录。这一点是,它使您能够从Web视图中隐藏/app/目录,因为用户的请求将首先被重写为/public/app/,从而遇到404被重写为{{ 1}}它将寻找控制器" App"。如果您要从子目录运行Phalcon,则需要将所有/public/index.php更改为/

我看到你正在使用/phalcontest/ 所以在你的情况下,你会想要一个像这样的目录结构:

root /var/www/;

确保将所有针对/www/phalcontest/public/index.php /www/phalcontest/public/css/bootstrap.css /www/phalcontest/public/js/jquery.js /www/phalcontest/app/config/config.php /www/phalcontest/app/controllers/IndexController.php /www/phalcontest/app/models/ /www/phalcontest/app/views/index.phtml /www/phalcontest/app/views/index/index.phtml 的请求重写为phalcontest(/.*)?,然后从那里将请求重写为phalcontest/public/$1,如果请求的文件或目录不存在。

这是一个将.htaccess转换为nginx的工具,如果有任何帮助的话: http://winginx.com/en/htaccess

老实说,你不需要如此完美地遵循他们的目录结构。您只需要重写逻辑来重写index.php文件的所有流量。有关Phalcon建议的index.php目录的部分,如果只是将/public/目录移到Web根目录下,则不需要/public/目录,然后引用其位置正确地从您的/app/文件。

Phalcon为您提供了有关如何在此处设置nginx重写的大量信息: https://docs.phalconphp.com/en/latest/reference/nginx.html

但是,由于您在本地主机上工作,我建议您使用hosts文件在localhost上创建子域。然后,您可以在index.php网络根目录下工作,并从/访问您的项目。然后,您在nginx配置中使用http://phalcontest.localhost/而不是server_name phalcontest.localhost;,并将其根目标设在server_name localhost;对于您的主机文件,您需要添加一行:{{1} }。这将使您免于DNS查找,因此子域将绑定到您的localhost。请参阅nginx subdomain configurationHow to test nginx subdomains on localhost