使用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 09 Servers
Nginx配置SSL证书出错解决方案
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
nginx的zabbix 5.0安装部署的方法步骤
Jul 16 Servers
nginx安装以及配置的详细过程记录
Sep 15 Servers
Nginx配置https的实现
Nov 27 Servers
Nginx速查手册及常见问题
Apr 07 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Apr 07 Servers
在Docker容器中部署SQL Server
Apr 11 Servers
Windows Server 2019 配置远程控制以及管理方法
Apr 28 Servers
docker compose 部署 golang 的 Athens 私有代理问题
Apr 28 Servers
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
Apr 29 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
Terran兵种介绍
2020/03/14 星际争霸
php4的session功能评述(二)
2006/10/09 PHP
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
php cli换行示例
2014/04/22 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
jquery 手势密码插件
2017/03/17 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
python标准算法实现数组全排列的方法
2015/03/17 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
python爬虫爬取网页表格数据
2018/03/07 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
奉献家乡演讲稿
2014/09/13 职场文书
2015年度保密工作总结
2015/04/24 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
八年级作文之友谊
2019/12/02 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python