问题回顾:
将环境迁移后,首页可以访问,但是后面的url链接都出现问题,只要一点击就出现,无法加载模块
第一时间想到的是url的跳转问题,于是检查nginx的配置文件,但是我们这边是一级域名,这样跳转是没有问题的
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}
后来在网上也找了很多文章,但是都没有解决这个问题
直到我看到这篇文章:thinkphp框架的路径问题 - 总结
TP中有不少路径的便捷使用方法,比如模板中使用的__URL__,__ACTION__等,如果你对这些路径不是很明白,用起来说不定就会有这样或那样的问题,抑或出了错也不知道怎么改,现在我们看一下这些路径到底是代表了什么吧! 假如你项目首页的URL是:www.test.com/other/Form 假如当前模块是:Index 假如当前操作是:index
那么首页完整的URL:http://www.test.com/other/Form/index.php/Index/index
__ROOT__:/other/thinkphp/mydemo
__SELF__:/other/thinkphp/mydemo/Form/index.php
__ACTION__: /other/thinkphp/mydemo/Form/index.php/Index/index
__URL__: /other/thinkphp/mydemo/Form/index.php/Index
__APP__: /other/thinkphp/mydemo/Form/index.php
__PUBLIC__:/other/thinkphp/mydemo/Public ../public(不区分大小写):/other/thinkphp/mydemo/Form/Tpl/default/Public
APP_PUBLIC_URL:/other/thinkphp/mydemo/Form/Tpl/default/Public
WEB_PUBLIC_URL:/other/thinkphp/mydemo/Public
模板中对路径部分的操作是这样子的: PHP代码 //项目公共目录
$tmplContent = str_ireplace('../public',APP_PUBLIC_URL,$tmplContent);
//网站公共目录
$tmplContent = str_replace('__PUBLIC__',WEB_PUBLIC_URL,$tmplContent);
//网站根目录
$tmplContent = str_replace('__ROOT__',__ROOT__,$tmplContent);
//当前项目地址
$tmplContent = str_replace('__APP__',__APP__,$tmplContent);
//当前模块地址
$tmplContent = str_replace('__URL__',__URL__,$tmplContent);
//当前项目操作地址
$tmplContent = str_replace('__ACTION__',__ACTION__,$tmplContent);
//当前页面操作地址
$tmplContent = str_replace('__SELF__',__SELF__,$tmplContent);
1、路径问题
我的TP心得:“路径问题,是个大问题!” 针对THINKPHP2.0,我发现以下名称和对应的路径为:
假如你项目首页的URL是:http://<servername>/openexam/ 假如当前模块是:Index 假如当前操作是:index
那么首页完整的URL:http://<servername>/openexam/index.php/Index/index
__ROOT__:http://<servername>/openexam/
__SELF__:http://<servername>/openexam/index.php
__ACT ION__: http://<servername>/openexam/index.php/Index/index
__URL__: http://<servername>/openexam/index.php/Index
__APP__: http://<servername>/openexam/index.php APP_PUBLIC_URL:http://<servername>/openexam/Tpl/default/Public
注意:以上缩写仅适用于模板中使用,如在php中则使用U方法做URL路由来实现
有很多人在THINKPHP下使用jQuery框架,但不 知如何加入。 我发现,多数问题都是路径问题。
我的项目架构是:http://localhost/openexam/ 在
C:\xampp\htdocs\Openexam\下放着一个名为script的文件夹,里面是jquery-1.4.1.js。 所以,在
C:\xampp\htdocs\Openexam\Tpl\default\Index\studentLogin.html中,使用:
<html> <head> <meta http-equiv="Content" <title>{$title}</title>
<script src="__ROOT__/Openexam/script/jquery-1.4.1.js"
type="text/javascript"></script> <script type="text/javascript">
$(document).ready( function(){ alert("ok"); } ) </script> </head>
<body> <form method="POST" action=""> Openexam欢迎您,请您登录:<br> ......
</body>
</html> 即 可。
我有想到可能还是路径的问题,于是我就检查了这边的路径:
所以这次我就在之前的URL(http://www.zljianjie.comjiekuanpt/)前面又加上了一级目录,
http://www.zljianjie.com/guanwang/jiekuanpt/ 访问正常
这时我在nginx的配置文件里面修改了url跳转的地址:
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/Guanwang/$1 last;
break;
}
}
重启nginx服务,访问正常!
备注:
可能有一些人会有疑问,为什么我url这边 http://www.zljianjie.com/guanwang/jiekuanpt/
guanwang字段是小写,而我nginx的配置文件中是/index.php/Guangwang/$1,这个是大写的?
在网站根目录下面的 ./Application/Guanwang/Conf/的config.php 文件里面参数:
'URL_CASE_INSENSITIVE' => true, //默认false 表示URL区分大小写 true则表示不区分大小写
'URL_MODEL' => 2, //URL模式 0:普通模式 1:PATHINFO模式 2:REWRITE模式 3:兼容模式
'VAR_URL_PARAMS' => '', // PATHINFO URL参数变量
'URL_PATHINFO_DEPR' => '/', //PATHINFO URL分割符
'URL_ROUTER_ON' => true, //开启路由