想基于typecho给自己的公司做一个企业宣传站,个人MACBOOK上的PHP开发部署采用的Zend Server Develop Edition. 说实话用Zend Server作为部署环境确实挺方便, 无需做过多的配置修改, 利用自带的zdpack工具
,在development.xml
完成应用的配置,然后生成打包文件.zpk
.直接在后台上传,仅通过简单的web可视化界面就可以轻松完成应用的部署,包括vhost,PHP版本,mysql等的配置都不需要做过多的操作.
直接在typecho官方网站上下载了最新的版本1.0(14.10.10).然后通过打包,代码上传,在install.php的引导下完成了数据库,管理员,邮箱,站点URL等的配置. 比较顺利,提示安装完成.不过接下来当我通过提示的链接,访问控制台时,浏览器直接调到了空白页.
访问站点主页:http://localhost:10088/typecho
(zend server默认采用10088端口自主安装app的访问).
接下来问题来了, 站点主页中除了首页
链接点击访问正常, 其余链接皆无法正常访问.通过浏览器查看源码发现. 除首页外的所有链接均变为: http://localhost:10088:10088/typecho/***
.
那么问题就来了,在站点设置中自定义的站点url在这里怎么就成了这样?
只能追代码了....
1.首先查看默认主题中的 /usr/themes/default/header.php
发现
<link rel="stylesheet" href="<?php $this->options->themeUrl('grid.css'); ?>">
<link rel="stylesheet" href="<?php $this->options->themeUrl('style.css'); ?>">
主题中的CSS链接正常.关于
的链接在line 60
<a<?php if($this->is('page', $pages->slug)): ?> class="current"<?php endif; ?> href="<?php $pages->permalink(); ?>" title="<?php $pages->title(); ?>"><?php $pages->title(); ?></a>
这里的$pages->permalink()
返回的结果异常.全局搜索:permalink, 结果太多,无从下手.
想到关于typecho的库表中有一个option
表,会不会是URL设置错误.结果siteUrl是正常的, 其余相关的URL设置也均无异样.
没办法, 直接通过传统的输出调试吧. 不知怎么的突然想到在 header.php
中直接打印$this
来寻找下眉目.
<?php print_r($this);?>
结果不出所料, 从$this的打印结果中看到了这样一个选项 [rootUrl] => 'http://localhost:10088:10088/typecho'
.好了,接下只要定位rootUrl在何处生成的就可以了.
通过rootUrl
定位查找, 确定/var/Widget/Options.php
中的line 373:
$this->rootUrl = $this->request->getRequestRoot();
然后找到request
相关代码:/var/Typecho/Request.php
中的
/**
* 获取url前缀
*
* @access public
* @return string
*/
public static function getUrlPrefix()
{
if (empty(self::$_urlPrefix)) {
self::$_urlPrefix = (self::isSecure() ? 'https' : 'http')
. '://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'])
. (in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT']);
}
return self::$_urlPrefix;
}
这里关于端口有限制为80或443, 问题的根源找到了. 根据个人的需求,添加上10088的支持, OK了. 突然发现Typecho的框架很大, 源码理解起来工作量很大. 有时间想进一步学习其中的开发思想. 不错的一次体验, 记载以供自己日后回顾此时的处理问题思路, 说不定也可以给其他遇到类似问题的朋友一点帮助