使用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 502 Bad Gateway错误原因及解决方案
Mar 31 Servers
Nginx+SpringBoot实现负载均衡的示例
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 24 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
苹果M1芯片安装nginx 并且部署vue项目步骤详解
Nov 20 Servers
Apache Linkis 中间件架构及快速安装步骤
Mar 16 Servers
Dashboard管理Kubernetes集群与API访问配置
Apr 01 Servers
如何通过cmd 连接阿里云服务器
Apr 18 Servers
Windows Server 2012配置DNS服务器的方法
Apr 29 Servers
详解ZABBIX监控ESXI主机的问题
Jun 21 Servers
nginx之内存池的实现
Jun 28 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
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
ThinkPHP验证码使用简明教程
2014/03/05 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Python中的字典遍历备忘
2015/01/17 Python
浅谈Python中的数据类型
2015/05/05 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
python支持多线程的爬虫实例
2019/12/21 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
投资合作协议书范本
2014/04/17 职场文书
文化建设工作方案
2014/05/12 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
出生证明范本
2015/06/15 职场文书
Python Socket编程详解
2021/04/25 Python
OpenCV实现反阈值二值化
2021/11/17 Java/Android