使用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网站服务如何配置防盗链(推荐)
Mar 31 Servers
Nginx域名转发https访问的实现
Mar 31 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
zabbix自定义监控nginx状态实现过程
Nov 01 Servers
Nginx防盗链与服务优化配置的全过程
Jan 18 Servers
Minikube搭建Kubernetes集群
Mar 31 Servers
HDFS免重启挂载新磁盘
Apr 06 Servers
Windows Server 2019 域控制器安装图文教程
Apr 28 Servers
Zabbix对Kafka topic积压数据监控的解决方案
Jul 07 Servers
Docker安装MySql8并远程访问的实现
Jul 07 Servers
Nginx如何限制IP访问只允许特定域名访问
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中实现进程间通讯
2006/10/09 PHP
php中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python实现堆排序的实例讲解
2020/02/21 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
中国网上药店领导者:1药网
2017/02/16 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
初中校园广播稿
2014/02/02 职场文书
开展创先争优活动总结
2014/08/28 职场文书
作风转变心得体会
2014/09/02 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
起诉状范本
2015/05/20 职场文书
盲山观后感
2015/06/11 职场文书