使用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 相关文章推荐
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
Mar 09 Servers
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
Mar 31 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
Z-Order加速Hudi大规模数据集方案分析
Mar 31 Servers
从零开始在Centos7上部署SpringBoot项目
Apr 07 Servers
nginx.conf配置文件结构小结
Apr 08 Servers
Nginx+Tomcat负载均衡多实例详解
Apr 11 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
阿里云 Windows server 2019 配置FTP
Apr 28 Servers
服务器间如何实现文件共享
May 20 Servers
nginx七层负载均衡配置详解
Jul 15 Servers
Nginx如何获取自定义请求header头和URL参数详解
Jul 23 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中使用hidef扩展代替define提高性能
2015/04/09 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
删除节点的jquery代码
2014/01/13 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
详解JavaScript函数
2015/12/01 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
对javascript继承的理解
2016/10/11 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
浅谈webpack对样式的处理
2018/01/05 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python subprocess库的使用详解
2018/10/26 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python实现彩色图转换成灰度图
2019/01/15 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
《花的勇气》教后反思
2014/02/12 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
银行自荐信范文
2015/03/25 职场文书
开学典礼观后感
2015/06/15 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
python中的装饰器该如何使用
2021/06/18 Python
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android