使用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 location 和 proxy_pass路径配置问题小结
Sep 04 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 Servers
Nginx速查手册及常见问题
Apr 07 Servers
Linux服务器离线安装 nginx的详细步骤
Jun 16 Servers
Windows server 2022创建创建林、域树、子域的步骤
Jun 25 Servers
vscode内网访问服务器的方法
Jun 28 Servers
nginx之内存池的实现
Jun 28 Servers
Docker容器harbor私有仓库部署和管理
Aug 05 Servers
Fluentd搭建日志收集服务
Sep 23 Servers
Shell中的单中括号和双中括号的用法详解
Dec 24 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+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
JS实现微信弹出搜索框 多条件查询功能
2016/12/13 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
日语系毕业生推荐信
2013/11/11 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
团队激励口号
2014/06/06 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
2014年物流工作总结
2014/11/25 职场文书
论语读书笔记
2015/06/26 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript