我在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的网站一起使用!
答案 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 configuration和How to test nginx subdomains on localhost。