使用Apache的rewrite

做PHP项目中需要用到URL重定向技术,模拟好像是静态页面,能够隐藏URL真实地址,有助于雨鞋基本的安全防范等等。那么好像rewrite是个很好的解决办法。

Posted in Servers onMarch 09, 2021

做PHP项目中需要用到URL重定向技术,基本上的需求就是把比如 /user/heiyeluren 重定向到 /user.php?uid=heiyeluren 之类的URL上,当然,你也可以把 /article/200707291011.html重定向到 /article.php?id=200507291011 之类的,模拟好像是静态页面,能够隐藏URL真实地址,有助于雨鞋基本的安全防范等等。那么好像rewrite是个很好的解决办法。

要在Apache里运行rewrite的话,必须先安装mod_rewrite的组件,就是一个mod_rewrite.c文件,然后必须在./configure的时候要放上mod_rewrite就能安装。
一般配置rewrite的话,可以在httpd.conf里面配置,也能在网页当前目录的.htaccess文件里进行定义来决定重定向去那个文件,那样的话,就非常具有灵活性了,同样也能够适合虚拟主机用户来做。

我们看一个.htaccess文件的例子:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [S=42]

#RewriteRule ^share/$ /share.php [QSA,L]
RewriteRule ^tag/([^/]+)/?$ /user_tags.php?tag=$1 [QSA,L]
RewriteRule ^city/([^/]+)/?$ /user_city.php?tag=$1 [QSA,L]
#RewriteRule ^([^/]+)/day/([^/]+)/?$ /user_share.php?id=$1&s=1&selTime=$2 [QSA,L]
#RewriteRule ^([^/]+)/day/([^/]+)/?$ /user_share.php?id=$1&s=1&selTime=$2 [QSA,L]

RewriteRule ^([^/]+)/day/([^/]+)/?$ /user_share.php?id=$1&s=1&selTime=$2 [QSA,L]
RewriteRule ^([^/]+)/week/([^/]+)/?$ /user_share.php?id=$1&s=2&selTime=$2 [QSA,L]
RewRiteRule ^([^/]+)/month/([^/]+)/?$ /user_share.php?id=$1&s=3&selTime=$2 [QSA,L]

RewriteRule ^([^/]+)/day/?$ /user_share.php?id=$1&s=1    [QSA,L]
RewriteRule ^([^/]+)/week/?$ /user_share.php?id=$1&s=2   [QSA,L]
RewriteRule ^([^/]+)/month/?$ /user_share.php?id=$1&s=3  [QSA,L]

RewriteRule ^([^/]+)/?$ /user_share.php?id=$1    [QSA,L]
</IfModule>

比较长吧,我们就简单关注一下关键的内容。<IfModule></IfModule>之间就是定义的内容,RewriteEngine就是确定是否运行URL重写功能,RewriteBase就是基本的路径是什么,最关键的就是下面的RewriteRule,就是我们需要重写的规则了,这里应用了兼容Perl规则的正则表达式:

Text:
  .           匹配任意单个字符
  [chars]     匹配当前字符
  [^chars]    不匹配当前字符
  text1|text2 包含text1或者text2任何一个

 

Quantifiers:
  ?           零个或者一个?号前的字符
  *           零个或者任意个任意长度的任意字符
  +           一个或者任意个任意长度的字符

Grouping:
  (text)      Grouping of text
              (either to set the borders of an alternative or
              for making backreferences where the Nth group can
              be used on the RHS of a RewriteRule with $N)

Anchors:
  ^           匹配内容开始标记
  $           匹配内容结束标记

Escaping:
  \char       使用\来进行特殊字符的转义,包括".[]()"等字符的转义


基本规则如上,比如下面的正则表达式:^/([^/]+)/~([^/]+)/(.*)$ 就是能够匹配象 /Language/~ Realname/.../File 这样的路径。

那么从这个角度去看上面的内容就比较容易理解了。我们简单看一下RewriteRule指令的规则:
RewriteRule   访问的路径    需要指向的真实路径
这样就很清楚了,比如说我要把/user/myname重定向到/user.php?uid=myname那么我的规则就必须这样:

RewriteRule ^user/([^/]+)$  ^/user.php?uid=$2 [QSA,L]

举一反三,就很容易理解规则如何去写,也就能够理解上面规则脚本的内容了。


Tags in this post...

Servers 相关文章推荐
查看nginx配置文件路径和资源文件路径的方法
Mar 31 Servers
Nginx域名转发使用场景代码实例
Mar 31 Servers
小程序后台PHP版本部署运行 LNMP+WNMP
Apr 01 Servers
Nginx 根据URL带的参数转发的实现
Apr 01 Servers
nginx部署多前端项目的几种方法
May 25 Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 Servers
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
May 11 Servers
Nginx静态压缩和代码压缩提高访问速度详解
May 30 Servers
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
Jun 10 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 Servers
Nginx如何限制IP访问只允许特定域名访问
Jul 23 Servers
Linux在两个服务器直接传文件的操作方法
Aug 05 Servers
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 #Servers
Nginx实现反向代理
Sep 20 #Servers
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
nginx 设置多个站跨域
Mar 09 #Servers
Apache站点配置SSL强制跳转443
Mar 09 #Servers
Apache压力测试工具的安装使用
Nginx同一个域名配置多个项目的实现方法
Mar 31 #Servers
You might like
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
prototype1.4中文手册
2006/09/22 Javascript
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
通过隐藏option实现select的联动效果
2009/11/10 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
python通过smpt发送邮件的方法
2015/04/30 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python函数与方法的区别总结
2019/06/23 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
学生党员思想汇报
2013/12/28 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
文明寄语大全
2014/04/11 职场文书
推荐信怎么写
2014/05/09 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
社团个人总结范文
2015/03/05 职场文书
教师工作表现自我评价
2015/03/05 职场文书
2015年个人思想总结
2015/03/09 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
python入门之算法学习
2021/04/22 Python