使用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配置SSL证书出错解决方案
Mar 31 Servers
nginx处理http请求实现过程解析
Mar 31 Servers
nginx处理http请求实现过程解析
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 24 Servers
Linux中Nginx的防盗链和优化的实现代码
Jun 20 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
Tomcat用户管理的优化配置详解
Mar 31 Servers
Nginx动静分离配置实现与说明
Apr 07 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
May 25 Servers
windows server 2016 域环境搭建的方法步骤(图文)
Jun 25 Servers
Apache Kafka 分区重分配的实现原理解析
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
长波知识介绍
2021/03/01 无线电
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
php数组(array)输出的三种形式详解
2013/06/05 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
javascript实现手动点赞效果
2019/04/09 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
Django Rest framework权限的详细用法
2019/07/25 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
造价工程师个人求职信
2013/09/21 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
课外科技活动总结
2014/08/27 职场文书
初中差生评语
2014/12/29 职场文书
防卫过当辩护词
2015/05/21 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书