使用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 相关文章推荐
Apache压力测试工具的安装使用
Mar 31 Servers
使用nginx动态转换图片大小生成缩略图
Mar 31 Servers
Nginx+SpringBoot实现负载均衡的示例
Mar 31 Servers
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
May 26 Servers
Kubernetes控制节点的部署
Apr 01 Servers
Nginx反向代理、重定向
Apr 13 Servers
Tomcat弱口令复现及利用
May 06 Servers
Nginx的gzip相关介绍
May 11 Servers
nginx 配置缓存
May 11 Servers
Nginx 匹配方式
May 15 Servers
Nginx静态压缩和代码压缩提高访问速度详解
May 30 Servers
Apache Kafka 分区重分配的实现原理解析
Jul 15 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作的文本留言本的例子(五)
2006/10/09 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
javascript函数库-集合框架
2007/04/27 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
python从入门到精通(DAY 3)
2015/12/20 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Python中django学习心得
2017/12/06 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
浅谈python写入大量文件的问题
2018/11/09 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
python利用7z批量解压rar的实现
2019/08/07 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
协议书怎么写
2014/04/21 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
教师求职简历自我评价
2015/03/10 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL