现在公司许多程序是在基于ThinkPHP框架上进行开发的, 然而基于此框架开发的程序,URL访问形式如下:
http://it.ctwoo.com/index.php/Login/index
默认Nginx是不支持PATHINFO的。
AMH虚拟主机支持PATHINFO更改方法,更改需要支持PATHINFO的主机的配置文件:
|
|
参考配置:
|
|
Esc :wq 保存退出。
进入AMH后台重启Nginx即可。
2014年10月30日补充:
问题1:thinkphp在nginx环境下,不支持pathinfo。
pathinfo模式,举个例子:
http://www.geekpark.net/read/view/171078
首先会访问到 www.geekpark.net/index.php文件
然后 通过php文件get到参数 就会获取到 read/view/171078
通过拆分成数组就是
array(0=>’read’,1=>’view’,2=>171078)
那么系统就会去 include read.php 然后在实例化 read
然后访问read对象内的 view方法
然后 view方法 get到171078这条参数进行数据库查询…..
很简单的理解为
read /view/ 171078
控制器 方法 参数
而thinkphp支持4种模式,将官网的讲解粘贴如下:
一、普通模式:设置URL_MODEL 为0
采用传统的URL参数模式
http://serverName/appName/?m=module&a=action&id=1
二、PATHINFO模式(默认模式):设置URL_MODEL 为1
默认情况使用PATHINFO模式,ThinkPHP内置强大的PATHINFO支持,提供灵活和友好URL支持。PATHINFO模式自动识别模块和操作,例如
http://serverName/appName/module/action/id/1/
或者
http://serverName/appName/module,action,id,1/
在不考虑路由的情况下,第一个参数会被解析成模块名称(如果启用了分组的话,则依次往后递推),第二个参数会被解析成操作,后面的参数是显式传递的,而且必须成对出现,例如:
http://serverName/appName/module/action/year/2008/month/09/day/21/
其中参数之间的分割符号由URL_PATHINFO_DEPR参数设置,默认为”/”,例如我们设置URL_PATHINFO_DEPR为“-”的话,就可以使用下面的URL访问
http://serverName/appName/module-action-id-1/
注意不要使用”:” 和”&”符号进行分割,该符号有特殊用途。
略加修改,就可以展示出富有诗意的URL,呵呵~
如果想要简化URL的形式可以通过路由功能(后面会有描述)以及空模块和空操作。
在PATH_INFO模式下面,会把相关参数转换成GET变量,以及并入REQUEST变量,因此不妨碍URL里面的GET和REQUEST变量获取。
三、REWRITE模式: 设置URL_MODEL 为2
该URL模式和PATHINFO模式功能一样,除了可以不需要在URL里面写入口文件,和可以定义.htaccess
文件外。在开启了Apache的URL_REWRITE模块后,就可以启用REWRITE模式了,具体参考下面的URL重写部分。
四、兼容模式: 设置URL_MODEL 为3
兼容模式是普通模式和PATHINFO模式的结合,并且可以让应用在需要的时候直接切换到PATHINFO模式而不需要更改模板和程序,还可以和URL_WRITE模式整合。兼容模式URL可以支持任何的运行环境。
兼容模式的效果是:
http://serverName/appName/?s=/module/action/id/1/
并且也可以支持参数分割符号的定义,例如在URL_PATHINFO_DEPR为~的情况下,下面的URL有效:
http://serverName/appName/?s=module~action~id~1
其实是利用了VAR_PATHINFO参数,用普通模式的实现模拟了PATHINFO的模式。但是兼容模式并不需要自己传s变量,而是由系统自动完成URL部分。正是由于这个特性,兼容模式可以和PATHINFO模式之间直接切换,而不需更改模板文件里面的URL地址连接。
某些服务器环境不能良好的支持PATHINFO,但是在大多数环境下面ThinkPHP可以进行兼容判断,如果你的服务器环境或者空间仍然无法识别PAHTINFO的话,或者需要自己增加识别方法或者可以选择普通模式或者兼容模式URL运行。
前面AMH(nginx环境)支持pathinfo相关设置有讲到
实际使用发现新版的thinkphp设置后,不能成功。
后来尝试,使用如下方法解决:
1、将thinkphp模式设置为rewrite模式;
2、在AMH下,通过AMRewrite模块,新建一个rewrite规则,内容如下:
|
|
3、将规则应用到对应网址,重启nginx。
问题2:AMH环境下访问sqlserver数据库,返回数据编码有误,导致返回数据均为问号
首先,AMH环境下安装mssql模块:
1、安装freetds
|
|
2、下载php源码,安装mssql模块
|
|
3、重启面板php、虚拟主机php
|
|
其次,修改php.ini
添加mssql.charset = “UTF8″