最近有一个新需求:

 

类似微博的地址那样,短地址的实现,为了无线这边广告的推广更方便;

 

知识点

1, 创建url和段地址的映射,用缓存或者mysql都可以;

CREATE TABLE `shorturl` (

`id` mediumint(8) NOT NULL AUTO_INCREMENT,

`parm` char(30) NOT NULL DEFAULT '', url的参数

`short` char(10) NOT NULL, 短地址

PRIMARY KEY (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

url存在则读取,没有则创建;

创建规则是通过id来生成short短地址的;

2, 生成短地址的方法:

   Apache添加mod_rewrite模块_php

3,rewrite

   最终短地址的访问形式如:

   http://domain/BEEDD

   那么就需要做rewrite跳转到一个文件,然后做处理:

 Apache添加mod_rewrite模块_绝对路径_02

  这样可以在/redirect/index.php  文件里做处理;

   

  就是在rewrite的时候遇到了一些问题:我的测试环境是nginx的测试ok,可是线上的环境是apache,而且确没有编译rewrite模块。郁闷啊;

 

  那么就来增加 rewrite模块吧!

 

  //在apache的源码安装目录中寻找mod_rewrite.c文件

  #find . -name mod_rewrite.c

 

  //进入包含mod_rewrite.c文件的目录
  #cd modules/mappers/mod_rewrite.c

 

  //apxs应指定绝对路径,在你当前正在使用apache的bin目录里
  #/usr/local/apache/bin/apxs -c mod_rewrite.c

  #/usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la

 
  如果没有什么错误的话,应该在你的apache的modules目录中编译出一个mod_rewrite.so文件。

  Apache添加mod_rewrite模块_绝对路径_03
  编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,

  如下:
  LoadModule rewrite_module modules/mod_rewrite.so
  这时,你的apache应该已经支持rewrite了。
  注:完成之后,记得重启服务器apache

 .可能遇到的问题
  httpd: Syntax error on line 54 of /usr/share/apache-2.2.11/conf/httpd.conf:

 

 Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache/modules/mod_rewrite.so: /usr/local/apache/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
  修改 httpd.conf,将
  LoadModule mod_rewrite_module modules/mod_rewrite.so
  改为
  LoadModule mod_rewrite modules/mod_rewrite.so
  如果出现这个错误
 Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file
  /usr/local/apache/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module
  修改http.conf
  原来:httpd.conf里面写的mod_rewrite_module
  改成 rewrite_module
  如果重启apache出现这个错误module rewrite_module is built-in and can`t be loaded
  表示模块是内建的,不用再调入,注释掉
  #LoadModule rewrite_module modules/mod_rewrite.so
  #####################################################
  检查:
  [root@www httpd-2.2.8]# ../bin/apachectl configtest
   Syntax OK
   这时,你的apache应该已经支持rewrite了。

 

  Vim /usr/local/apache/conf/extra/httpd-vhosts.conf

  Apache添加mod_rewrite模块_重启_04

 

  重启apache

 

  测试ok,

 

  搞定!