如今,Web服务高速发展的时代,各式各类的门户网站,如新浪http://www.sina.com、腾讯http://www.qq.com,这些网站大家都很容易记住,因为这种名称都是有规则和含义的。如果给你一个http://14.215.177.38,你肯定记不住这个网站是什么,可是我告诉你它就是百度首页。

所以,我们在开发一个网站系统的时候,还是要对链接进行优化的,而我理解的优化类型有伪静态短连接。

其实,如果你数据结构学的不错,这个对你来说很容易理解,毕竟它就是一种地址映射的关系。

常识告诉我们,当我们请求一个URL的时候,我们需要附带一些参数才能得到各种动态的效果,而这种附加参数方式,例如www.baidu.com?keywords=http,表示我们使用百度搜索关键字http,这样百度引擎就可以根据参数,返回响应的列表页给用户。

而,我们想实现所谓地址优化:如

伪静态

用户可以直接访问这样的链接

http://www.baidu.com/http.html  效果和上面是一样的。

短连接

如,一个链接www.baidu.com?name=lisa&age=18,我们可以转化为:www.baidu.com/lisa/18

接下来,我们来一个实战,如何在Apache服务的PHP网站系统实现伪静态和短链接呢?

我们拿到一个链接:http://localhost/index.php/act/search/op/index/cate_id/314

第一步,我们去掉index.php

配置Apache Rewrite实现

 <IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)html$ /index.php/$1 [QSA,PT,L]
</IfModule>

第二步,对链接进行映射和静态处理

 #获取请求完整URI地址
$path_info = $_SERVER['REQUEST_URI'];
#截获参数部分
$path_info = substr($path_info,strrpos($path_info,'/')+1);
#过滤?号后面内容
if(strpos($path_info, '?')) {
$path_info = substr($path_info, 0, (int) strpos($path_info, '?'));
}
//去掉伪静态扩展名
$path_info = substr($path_info,0,-strlen($this->_rewrite_extname));
//根据规则匹配URL
$path_info = $this->path_info_function($path_info); #根据路由规则匹配(路由表)
private function path_info_function($path_info) {
$reg_match_from = array(
'/^article-(\d+)$/',
'/^article_cate-(\d+)$/'
);
$reg_match_to = array(
'article-show-article_id-\\1',
'article-article-ac_id-\\1'
);
return preg_replace($reg_match_from,$reg_match_to,$path_info);
} #匹配完成后,得到参数字符串;并对其进行解析,得到参数表
$split_array = preg_split($this->_pathinfo_pattern,$path_info); //act,op强制赋值,得到路由
$_GET['act'] = isset($split_array[0]) ? $split_array[0] : 'index';
$_GET['op'] = isset($split_array[1]) ? $split_array[1] : 'index';

一切搞定。

这样我们就可以得到,一个短链接,并且支持伪静态:http://localhost/search-index-314.html

PHP伪静态与短链接的更多相关文章

  1. PHP实现新浪长链接转化成短链接API

    我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实 ...

  2. 长链接转换成短链接(iOS版本)

    首先需要将字符串使用md5加密,添加NSString的md5的类别方法如下 .h文件 #import <CommonCrypto/CommonDigest.h> @interface NS ...

  3. 基于Redis的短链接设计思路

    [Markdown阅读][1] 今天上班的时候收到一个需要短链接的需求,之前的做法都是使用了新浪的短链接API(https://api.weibo.com/2/short_url/shorten.js ...

  4. 微信开发第8章 通过accesstoken将长连接转换为短链接

    业务场景:开发的过程中经常会有一些很长的链接,这个时候如果生成二维码,会导致扫码的过程中识别比较慢,如果存入数据库,会导致数据库的字段长度要设定的很长才行,所以把长连接转换为短链接就越来越重要了. 接 ...

  5. 新浪短链接API接口示例

    <?php /** * URL地址长短切换,由sina新浪短链接API生成 * User: chenqt * Date: 2016/8/23 * Time: 18:45 */ class Url ...

  6. android实现点击短链接进入应用 并获得整个连接的内容

    例如:我收到一个短信是一个链接:http://www.qq.com/a/b/?, 当我点击以后我要实现的场景是:点击----->有两种情况可供选择:手机中有此应用,跳转到应用:反之,则进入网页. ...

  7. 使用.net 自建短链接(短网址)

    短连接大家都不陌生,例如新浪的 t.cn .京东的 3.cn .淘宝的 tb.cn 等等.都已经是家喻户晓的短连接域名.不知道有多少人像我一样,对短连接原理好奇而且尝试自建了呢? 今天发布这个文章的目 ...

  8. 世界上最好的语言搭建短链接及统计功能(附API代码)

    前言 在这个营销的时代,短链接和二维码是企业进行营销中非常重要的工具,不仅仅是缩短了链接,而且还可以通过扩展获得更多的数据,诸如点击数.下载量.来源以及时间等等. 网上搜寻了一下比较有名有U.NU和0 ...

  9. 微信公众号开发C#系列-10、长链接转短链接

    1.概述 短网址的好处众多,便于记忆,占用字符少等,现在市面上出现了众多的将长网址转变为短网址的方法,但是由于他们都是小的公司在幕后运营,所以很不靠谱,面对随时关闭服务的可能,这样也导致我们将转换好了 ...

随机推荐

  1. Inorder Successor in BST 解答

    Question Given a binary search tree and a node in it, find the in-order successor of that node in th ...

  2. C++私有构造函数

    一. 类的构造函数一般是public的,但是也可以是private的.构造函数为私有的类有这样的特点: <1>不能实例化:因为实例化时类外部无法访问其内部的私有的构造函数: <2&g ...

  3. Arm Linux系统调用流程详细解析

    Linux系统通过向内核发出系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口. 系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的 ...

  4. java二维码开发

    之前就写过很多关于二维码的东西,一直没有时间整理一下,所以呢今天就先来介绍一下如何利用java开发二维码.生成二维码有很多jar包可以实现,例如Zxing,QRcode,前者是谷歌的,后者日本的,这里 ...

  5. 百度地图 Android SDK - 检索功能使用的简单演示样例

    百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...

  6. 笔记--cocos2d-x 3.0 环境搭建

    一.下载资源工具 1.下载cocos2d-x 3.0  官网地址:http://www.cocos2d-x.org/filedown/cocos2d-x-3.0-cn 2.下载VS2012 地址网上搜 ...

  7. Silverlight调用网站项目的Session

    项目中遇到Silverlight调网站Session的问题了,试了几种方法,用这种方法获取到了,如果有不对不恰当的地方,还望各路大神给指正出来. 解决方法: 1.Silverlight调用网站的接口 ...

  8. django防止表单数据重复提交

    思路:      在Asp.net中存在Page.IsPostback的方法,所以对django中表单提交数据的重复提交的数据采用相似方法实现,即在页面第一次访问时,即访问方法为GET方法在view中 ...

  9. PHP学习笔记三十七【http】

    <?php print_r($_SERVER); //$_SERVER预编译变量[数组]输出请求报文,注意大小写 echo "<br/>"; foreach($_ ...

  10. CGFloat和float

    CGFloat :在mac上自适应,在64位的系统,会变宽,32位会变窄,手机没变化float:没有变化