使用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 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
Nginx实现反向代理
Sep 20 Servers
Linux安装Nginx步骤详解
Mar 31 Servers
如何利用map实现Nginx允许多个域名跨域
Mar 31 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
Nginx配置之实现多台服务器负载均衡
Aug 02 Servers
关于nginx 实现jira反向代理的问题
Sep 25 Servers
Docker 镜像介绍以及commit相关操作
Apr 13 Servers
使用Nginx+Tomcat实现负载均衡的全过程
May 30 Servers
基于docker安装zabbix的详细教程
Jun 05 Servers
vscode远程免密登入Linux服务器的配置方法
Jun 28 Servers
WIN10使用IIS部署ftp服务器详细教程
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基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
表单复选框向PHP传输数据的代码
2007/11/13 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Python 字符串与数字输出方法
2018/07/16 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
高山背包:High Sierra
2017/11/23 全球购物
护士的岗位职责
2013/12/04 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
应届大学生求职信
2014/07/20 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
个人售房合同协议书
2016/03/21 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技