PHP伪静态与短链接

如今,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实现

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

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

 1 #获取请求完整URI地址
 2 $path_info = $_SERVER[‘REQUEST_URI‘];
 3 #截获参数部分
 4 $path_info = substr($path_info,strrpos($path_info,‘/‘)+1);
 5 #过滤?号后面内容
 6 if(strpos($path_info, ‘?‘)) {
 7        $path_info = substr($path_info, 0, (int) strpos($path_info, ‘?‘));
 8 }
 9 //去掉伪静态扩展名
10 $path_info = substr($path_info,0,-strlen($this->_rewrite_extname));
11 //根据规则匹配URL
12 $path_info = $this->path_info_function($path_info);
13
14 #根据路由规则匹配(路由表)
15 private function path_info_function($path_info) {
16         $reg_match_from = array(
17             ‘/^article-(\d+)$/‘,
18             ‘/^article_cate-(\d+)$/‘
19         );
20         $reg_match_to = array(
21             ‘article-show-article_id-\\1‘,
22             ‘article-article-ac_id-\\1‘
23         );
24         return preg_replace($reg_match_from,$reg_match_to,$path_info);
25     }
26
27 #匹配完成后,得到参数字符串;并对其进行解析,得到参数表
28 $split_array = preg_split($this->_pathinfo_pattern,$path_info);
29
30 //act,op强制赋值,得到路由
31 $_GET[‘act‘] = isset($split_array[0]) ? $split_array[0] : ‘index‘;
32 $_GET[‘op‘] = isset($split_array[1]) ? $split_array[1] : ‘index‘;

一切搞定。

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

时间: 2024-08-08 01:28:21

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

THINKPHP短链接设置方法(路由设置)

//路由设置(短链接设置)'URL_ROUTER_ON' => true,'URL_ROUTE_RULES' => array('log' => 'Login/index','admin' => 'Login/admin','reg' => 'Login/register', 'c/:id' => 'Index/index/user' '/^C_(\d+)$/' => 'Index/index/user?id=:1'), 长链接:http://localhost/

百度 谷歌 Twitter,这么多短链接服务(Short Url)到底哪家强?

一.短链接是什么 短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串. 它的原理也非常简单,就是采用 Domain Redirect(域名重定向) ,将一个域名自动跳转到另一个域名. 根据wikipedia描述,短链接的方案最早在2000年诞生.在2009年11月,著名短链接服务提供商Bitly的访问量是21亿,可见短链接的使用需求是非常大的. 维基地址 而在国内,短链接的普及与微博息息相关. 最早是由新浪仿照Twitter的140短篇博文功能,上线了新浪微博,之

微信公众号开发-长链接转短链接

主要使用场景: 开发者用于生成二维码的原链接(商品.支付二维码等)太长导致扫码速度和成功率下降,将原长链接通过此接口转成短链接再生成二维码将大大提升扫码速度和成功率. http请求方式: POST https://api.weixin.qq.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN 参数说明 参数 是否必须 说明 access_token 是 调用接口凭证 action 是 此处填long2short,代表长链接转短链接 long_url 是

php 微信接口API之长链接转短链接代码示例

[php] view plain copy <?php header("Content-Type: text/html; charset=utf-8"); $longurl; if(isset($_POST['longurl'])){ $longurl = $_POST['longurl']; }else{ die("没有post值进来"); } //echo $longurl; $id = "你的AppID"; $secret = &qu

openresty && hashids&& redis 生成短链接

1. 原理 a. 从redis 获取需要表示的短链接的id( redis incr) b. hashids 编码 id c. openresty  conteent_by_lua_block 阶段显示数据 2. 安装以来的插件 a. lua hashdis  使用  luarocks 注意需要先安装lua 开发包 b. copy hashids lua 包 到 openresty 的lualib  方便调用 c. redis 安装 luarocks install hashids 3. 代码 n

java 短连接+MD5加密短链接

java 短连接+MD5加密短链接 import java.security.MessageDigest; public class ShotUrlUtil { public static void main(String[] args) { System.out.println(shortUrl("http://www.baidu.com/")); } public static String shortUrl(String url) { String[] chars = new S

新浪短链接API接口示例

<?php /** * URL地址长短切换,由sina新浪短链接API生成 * User: chenqt * Date: 2016/8/23 * Time: 18:45 */ class UrlSwitch { public function __construct() { //访问sina的key $this->sina_appkey = '31641035'; } private function curlQuery($url) { //设置附加HTTP头 $addHead = array

将一条长链接转成短链接

package com.wanhua.weixin.util; import java.util.HashMap;import java.util.Map; import org.json.JSONObject; import play.cache.Cache;import play.i18n.Messages; import com.alibaba.fastjson.JSON;import com.wanhua.weixin.model.AccessToken; /** * 请求地址url的工

java清除所有微博短链接

java实现微博短链接清除,利用正则,目前只支持微博短链接格式为"http://域名/字母或数字8位以内"的链接格式,现在基本通用 如果链接有多个,返回结果中会有多出的空格,请注意! 实现代码: 1.测试版       public static void main(String[] args) { // System.out.println(testFilter("刚在#微操盘#卖出的这支600111 包钢稀土 又挣钱了!有木有!人品爆发了有木有! http://t.cn/