OneThink开发模式向非WEB目录的生产环境的迁移

浏览:2727 发布日期:2015/11/13 分类:技术分享
开发模式又称为调试模式,是我们进行程序开发时使用的模式,往往访问量不大,开启错误显示(程序员级别的),可以对错误原因进行追踪,记录详细的错误日志信息以便于程序调试。
生产模式就是我们的网站正式上线了,放到服务器上供网民访问和使用,通常这种模式下会关闭错误显示(程序员级别的),仅记录业务日志信息,错误日志信息通常以.log文件形式记录以供后台排错查看。
一、把项目文件放到非WEB目录下此迁移应用于自己的服务器,不适合于虚拟主机!把OneThink项目文件放到非WEB目录下这个操作将有效的提高我们网站程序的安全性,举个最简单的例子:
现在在浏览器输入:http://localhost/Application/Home/Controller/IndexController.class.php出现报错页面:Fatal error: Class 'Home\Controller\HomeController' not found in D:\www\Application\Home\Controller\IndexController.class.php on line 14这说明我们的程序文件是完全暴露在网络环境中的,存在安全隐患。

把OneThink项目文件放到非WEB目录下能够消除这个安全隐患。
OneThink的入口文件/index.php中以下的注释说的就是这个意思。/**
 * 应用目录设置
 * 安全起见,建议安装调试完成后移动到非WEB目录
 */
define ( 'APP_PATH', './Application/' );
具体步骤如下:

1、在/Public/目录下新建一个Public子目录,将/Public/目录下的所有子目录和文件移动到/Public/Public/子目录下(这样做,你就可以不用修改无数个模板的Public定义了)

2、将/index.php和/.htaccess文件移动到/Public/目录下,入口文件位置变为:/Public/index.php
/Public/.htaccess
3、修改index.php文件内容
/index.php//开发模式的入口文件s
define('APP_DEBUG', true );
define ( 'APP_PATH', './Application/' );
define ( 'RUNTIME_PATH', './Runtime/' );
require './ThinkPHP/ThinkPHP.php';
//开发模式的入口文件e
修改为://路径定义为绝对路径可以提高系统的加载效率(见《TP手册》)
/Public/index.php//生产模式的入口文件s
define('APP_DEBUG',false);
define ( 'APP_PATH', 'D:\\www\Application\\' );
define ( 'RUNTIME_PATH', 'D:\\www\\Runtime\\' );
require 'D:\\www\\Think\\ThinkPHP.php';
//生产模式的入口文件e
4、修改httpd.conf(关键的一步)
D:\httpd\conf\httpd.conf
将:DocumentRoot "d:/www"
<Directory "d:/www">
修改为:DocumentRoot "d:/www/Public"
<Directory "d:/www/Public">
以上修改就是将"d:/www/Public"目录设置为我们的网站根目录,使用我们刚才移动的/Public/index.php入口文件,即可正常访问新网站了,在浏览器中输入:
http://localhost/
OK,网站访问一切正常,点击其他页面看看,OK!

5、最后一步,Addons根目录修改:
修改Addon.class.php文件:
\Application\Common\Common\function.phpconst ONETHINK_ADDON_PATH = './Addons/';改为:const ONETHINK_ADDON_PATH = '../Addons/';现在看看最终的目录结构:(生产模式下的目录结构)
"d:/www"目录下的文件夹和文件:/Addons
/Application
/Data
/Public
/Runtime
/ThinkPHP
/Uploads
"d:/www"目录下没有文件
"d:/www/Public"目录下的文件夹和文件:/Public  //我们刚才新建的文件夹
.htaccess
index.php
"d:/www/Public/Public"目录下的文件夹和文件:/Admin
/static
/Home
favicon.ico
网站访客只能访问"d:/www/Public"网站目录及其子目录下的内容,而其他目录都在"d:/www"目录下,只能由服务器通过程序访问。
我们现在再在浏览器输入:
http://localhost/Application/Home/Controller/IndexController.class.php
报404错误,说明网站目录下已不存在此文件,把项目文件放到非WEB目录下就算成功了。

二、将默认模块设为"Home"(此步可减少一级访问级数)设置前的访问网址:
http://localhost/Home/Article/detail/id/19.html
设置后的访问网址:
http://localhost/Article/detail/id/19.html
设置:/ThinkPHP/conf/convention.php//'MODULE_ALLOW_LIST'      =>  array('Admin'),//此种配置,则http://localhost/Home/Article/不可访问,只能唯一使用http://localhost/Article/访问
'MODULE_ALLOW_LIST'      =>  array('Home','Admin'),
'DEFAULT_MODULE'        =>  'Home',  // 默认模块
2、将模板文件中的"__CONTROLLER__"或"__URL__"修改为"__SELF__",否则你模板中链接或表单可能会不正常。注意:此种方法解决的也不是太好,可能局部还需要进一步调整。

三、其他
其他还有什么需要注意的,欢迎大家补充!
(完)
最佳答案
评论( 相关
后面还有条评论,点击查看>>