PhpCms v9 Tag url静态化全攻略 兼容"+","#"等特殊字符

清泛原创
首先确认我们的需求:http://xxx.com/tag/标签  来访问:http://xxx.com/index.php?m=content&c=tag&a=lists&tag=标签
实现url的伪静态化。(phpcms 2008的代码可能有些差异,但完全可以参照本方案类推)

一、修改url重写规则:
网站根目录下.htaccess文件添加如下配置
RewriteRule ^tag/(.*)$ index.php?m=content&c=tag&a=lists&tag=$1&%1 
RewriteCond %{QUERY_STRING} ^(.*)$ 
二、修改所有访问Tag的链接:
全局搜索 index.php?m=content&c=tag&a=lists&tag=
整体替换为:tag/   (建议一个个手动替换,改动地方不多)

三、修改处理Tag处的逻辑代码:
phpcms/modules/content/tag.php  lists函数开头部分修改如下(array使用[]取值貌似老版本php不支持,这里已改使用current,next函数)
$uri = trim($_SERVER['REQUEST_URI']);
                $tag = current(explode('?', next(explode('tag/', $uri))));
                $tag = urldecode($tag);

                if (empty($tag)) {
                        $this->init();
                        exit;
                }
                
                $tag = safe_replace(addslashes($tag));
修改起来很简单,兼顾含特殊字符的tag,测试OK。

附注:url对tag内容进行了一次urlencode,但是url重写中自动对其进行了urldecode,然后代码中如果使用_GET["tag"]则会再进行一次urldecode,这样特殊字符就进行了二次解码原本内容失效。有人建议url中二次encode内容,当然可以解决,但是不够好,因为这样的话url中是一连串不友好的UTF-8编码字符串,不能辨识tag内容。最后本帖的解决方案仍然是一次encode,然后处理时不使用_GET["tag"],而是手动解析$_SERVER['REQUEST_URI']。
此外,分页测试仍然OK,大家可以放心使用。

PhpCms 静态化 特殊字符

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部