使用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 31 Servers
Nginx图片服务器配置之后图片访问404的问题解决
Mar 21 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Apr 07 Servers
Windows和Linux上部署Golang并运行程序
Apr 22 Servers
nginx日志格式分析和修改
Apr 28 Servers
linux目录管理方法介绍
Jun 01 Servers
windows server 2012安装FTP并配置被动模式指定开放端口
Jun 10 Servers
windows server 2016 域环境搭建的方法步骤(图文)
Jun 25 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
Jun 28 Servers
Windows Server 2016服务器用户管理及远程授权图文教程
Aug 14 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
很实用的一个完整email发送程序
2006/10/09 PHP
php header Content-Type类型小结
2011/07/03 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
Vue自定义指令详解
2017/07/28 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
初步解析Python中的yield函数的用法
2015/04/03 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
汽车销售顾问求职自荐信
2014/01/01 职场文书
求职简历中自我评价
2014/01/28 职场文书
教师个人自我评价
2015/03/04 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers