使用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启动失败的几种错误处理
Apr 01 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
Nginx配置之实现多台服务器负载均衡
Aug 02 Servers
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
Nov 17 Servers
nginx location 带斜杠【 / 】与不带的区别
Apr 13 Servers
nginx搭建NFS网络文件系统
Apr 14 Servers
Windows Server 2019 域控制器安装图文教程
Apr 28 Servers
centos7安装mysql5.7经验记录
May 02 Servers
nginx之queue的具体使用
Jun 28 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
php设置编码格式的方法
2013/03/05 PHP
php操作xml
2013/10/27 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
php集成开发环境详解
2019/09/24 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
python中查看变量内存地址的方法
2015/05/05 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python try except 捕获所有异常的实例
2018/10/18 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
详解Python中的文件操作
2021/01/14 Python
市优秀教师事迹材料
2014/02/05 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery