phpcms更新url或生成内容时,url路径中多出一个“/”,出现双斜杠//

phpcms生成内容或更新URL,有时会出现url路径中多个一个斜杆“/”,出现双斜杠的情况,如:http://www.web315.net/category//article/1.html,http://www.web315.net//category/article/1.html等。

解决方法:

  1. URL规则管理中的{$categorydir}{$catdir}变量前面“/”去除,默认这两个变量尾部都是自带“/”的;
  2. system.php配置文件中设置html_root为空:'html_root' => '',system.php文件在/caches/configs/路径下。

原因分析

无论是生成内容还是更新URL,链接处理时都需要调用/phpcms/modules/content/模块下create_html.php中的urls()函数,大约在190行,如下图:phpcms更新url或生成内容时,url路径中多出一个“/”,出现双斜杠//
其中$this->url = pc_base::load_app_class('url'),所以urls()调用了content模块url类的show()方法,我们以更新指定栏目URL为例,看看是如何处理url链接的,如下图:
phpcms更新url或生成内容时,url路径中多出一个“/”,出现双斜杠//其中$this->urlrules = getcache('urlrules','commons'),也就是加载了urlrules缓存,这个缓存里面保存的就是后台设置的url规则。从上图可以看到各种url和dir目录最后都拼接了“/”,所以后台设置url规则时{$categorydir}{$catdir}两个变量前不需要再加斜杆符号。

同样是url类中,再往下看会涉及到$html_root变量,如下图:
phpcms更新url或生成内容时,url路径中多出一个“/”,出现双斜杠//
从上图中可以看到,$html_root变量后面也都拼接了斜杆字符,所以system.php配置中的html_root不需要以“/”字符作为结尾。

原文链接:http://www.web315.net/doc/53.html