destoon自定义文件的伪静态地址优化
destoon自定义文件的伪静态优化
destoon给出了一个自定义文件传参的方式
在/include/global.func.php 有个rewirte函数来处理
目前的处理方式:index.php?catid=0&areaid=0&z=0的伪静态处理结果为
index-htm-catid-0-areaid-0-z-0.html
但是这种格式不是特别好,因为如果值为0或者值为空的时候, 表示值不存在,如果是多重条件的组合,会生成一长串空值地址:
我现在增加一个方法
把类似这样的长网址search-htm-areaid-1-catid-0-order-0-kw-.html简化成search-htm-areaid-1.html
rewrite是原方法,在方法体中增加一个getUrlKeyValue($url)来处理
function rewrite($url, $encode = 0) { if(!RE_WRITE) return $url; if(RE_WRITE == 1 && strpos($url, 'search.php') !== false) return $url; if(strpos($url, '.php?') === false || strpos($url, '=') === false) return $url; $url= getUrlKeyValue($url);//这里增加一个过滤方法解决值为空或0的问题 $url = str_replace(array('+', '-'), array('%20', '%20'), $url); $url = str_replace(array('.php?', '&', '='), array('-htm-', '-', '-'), $url).'.html'; return $url; }
function getUrlKeyValue($url) { $result = ''; $mr = preg_match_all('/(\?|&)(.+?)=([^&?]*)/i', $url, $matchs); if ($mr !== false) { for ($i = 0; $i < $mr; $i++) { if($matchs[3][$i]) { $result.=$matchs[2][$i].'='.$matchs[3][$i].'&'; } } } $rootStr = substr($url,0,strpos($url, '.php?')+5); $result = $rootStr.rtrim($result,'&'); return $result; }
服务端htaccess对地址的接收:
RewriteRule ^(.*)-htm-(.*)$ $1.php?$2
$DT_QST = addslashes($_SERVER['QUERY_STRING']);
然后rewirte.inc.php文件对query_string做接收处理
defined('IN_DESTOON') or exit('Access Denied'); $pstr = ''; if(isset($_SERVER['UNENCODED_URL']) && strpos($_SERVER['QUERY_STRING'], '-htm-') !== false) $_SERVER['QUERY_STRING'] = substr($_SERVER['UNENCODED_URL'], strpos($_SERVER['UNENCODED_URL'], '-htm-') + 5);//IIS7+ if($_SERVER['QUERY_STRING']) { if(preg_match("/^(.*)\.html(\?(.*))*$/", $_SERVER['QUERY_STRING'], $_match)) { $pstr = $_match[1]; } else if(preg_match("/^(.*)\/$/", $_SERVER['QUERY_STRING'], $_match)) { $pstr = $_match[1]; } } else if($_SERVER["REQUEST_URI"] != $_SERVER["SCRIPT_NAME"]) { $string = str_replace($_SERVER["SCRIPT_NAME"], '', $_SERVER["REQUEST_URI"]); if($string && preg_match("/^\/(.*)\/$/", $string, $_match)) $pstr = $_match[1]; } if($pstr && strpos($pstr, '-') !== false) { $_GET = array(); $pstr = explode('-', $pstr); $pstr_count = count($pstr); if($pstr_count%2 == 1) --$pstr_count; for($i = 0; $i < $pstr_count; $i++) { $_GET[$pstr[$i]] = $MQG ? addslashes($pstr[++$i]) : $pstr[++$i]; } } ?>
微信号:tieniu6636
分类:
PHP开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类