Apache伪静态学习

原文链接:http://www.benben.cc/blog/?p=305

Apache中有着这样一个模块,它默默无闻,却是URL操作的瑞士军刀!有人这样评价它:“尽管它的例子和文档数量可以以吨来计算,但它仍然是巫术,该死的巫术。”

它是一个基于一定规则的实时重写URL请求的引擎,它的名字叫做“rewrite_module”,它的源文件是“mod_rewrite.c”。

1、什么是mod_rewrite?

mod_rewrite是一个Apache模块,该模块提供了一个基于规则的(使用正则表达式分析器的)实时重写URL请求的引擎,从而使得服务器可以操纵客户端所请求的网址。mod_rewrite会通过事先已经定义的正则表达式规则对请求的网址进行匹配检查,如果在地址中匹配到一个规则,并满足相应的条件,该规则就会被一个替代的字符串或者是动作所取代。

2、使用mod_rewrite的优点?

使用mod_rewrite,有两个最为显著的优点,一是能够将丑陋的、复杂的网址转化为所谓的“友好的”或者是“干净的”网络地址。如此一来,不仅仅提升了良好的用户体验,而且还有利于搜索引擎对网址的抓取分析,创建友好的网址也是一种搜索引擎优化(SEO)技术。

来看看下边的例子:

通过我们的改造,新网址更容易为人类所理解,瞥一眼就可以很容易记忆,诸如此类的网址不仅仅是看上去变的简单了,对搜索引擎来说也是友好的,可以使搜索引擎更好的从中提取语义,除了这些简单的转换,mod_rewrite还可以灵活的做很多的事情。当然,所有这些功能和灵活性带来一个问题,那就是复杂性,因此,不要指望一天之内就能看懂整个模块。

二是能够显著的提升网站的安全性,网址1的方式是一种暴露式的脚本调用,倘若程序编写时候过滤不周密就会导致调用失败,甚至导致数据库的破坏。然而通过转换为更加友好的网址形式,用户并不知道list.php的存在,试图在这种情况下进行攻击在执行PHP之前就已经失败了。

3、如何启用mod_rewrite?

在服务器上启用mod_rewrite模块必须修改全局配置文件(httpd.conf),如果你想确认你的主机是否支持该模块,只需要打开httpd.conf文件,找到

LoadModule rewrite_module modules/mod_rewrite.so
如果不幸它被注释掉了(行首#为注释符号),那么删掉注释符号”#”重启服务器即可。

除此之外,你还可以通过phpinfo()来测试mod_rewrite模块是否启用:

<?php phpinfo(); ?>
在”Loaded Modules”中,如果你能看到”mod_rewrite”的身影,那么恭喜你,你的服务器支持mod_rewrite模块。

4、哪个文件用来存储mod_rewrite规则?

如果你的主机是Windows,那么你需要将规则写进httpd.ini,如果你的主机是Linux,就需要用.htaccess来大展身手了。

5、mod_rewrite的典型应用有哪些?

在许多学科,除非你自己亲自动手尝试,否则你是不可能学会的!学习伪静态尤其是如此,mod_rewrite有许多非常贴近实际应用的用途,譬如如下三种典型的应用:

a.子目录绑定

譬如a.com指向我们服务器的根目录\public_html\,而特殊需要使得我们需要将b.com指向到服务器的子目录\public_html\b,但是有时候我们的服务器并不支持子目录绑定,这时候我们可以将b.com像a.com一样绑定至根目录,然后通过htaccess进行URL重定向从而间接的实现子目录的绑定。

AddHandler application/x-httpd-php5s .php
RewriteEngine onRewriteCond %{HTTP_HOST} ^(www.)?b.com$
RewriteCond %{REQUEST_URI} !^/b/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /b/$1RewriteCond %{HTTP_HOST} ^(www.)?b.com$
RewriteRule ^(/)?$ b/default.html [L]
通过这些规则,就能够使得我们访问b.com的时候,自动重定向到http://a.com/b/,从而达到了我们间接实现子目录绑定的目的。

b.网址归一化

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
这是一条最经典的重写规则,它能够将用户输入的所有开头为http://www.example.com/的网址硬性重定向到http://example.com/,比如用户输入http://www.example.com/admin,重写后网址就变成了http://example.com/admin。

c.图片防盗链

网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益。早期的盗链一般是一些比较小的网站盗取一些有实力的大网站的地址,盗链的目标比较有针对性,现如今,一些大型的网站也已经开始把盗链的目光锁定在了整个互联网上,窃取整个互联网上的其它机器的带宽。常见的盗链有以下几种:图片盗链、音频盗链、视频盗链、文件盗链。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !example.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]RewriteRule .*\.(gif|jpg|png)$ http://www.example.com/nolinks.gif [R,NC,L]
</IfModule>

规则中的网址我暂且称作“白名单”,亦即只有白名单中的网址可以访问服务器上的资源。而规则最后则限定了防盗链所起作用的文件类型(gif|jpg|png),如果有其它网站试图访问服务器上被限定的文件类型,就会被重定向到我们指定的警告图片。

当然,这种方法并不是100%有效的,但是不可否认,它是禁止大多数盗链的最有效的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同的容器里实现 RadioButton的单选

请教一个各位牛人一个问题&#xff0c;如图&#xff1a; &#xff08;问题解决&#xff0c;见后面的解决方案~~&#xff09; 怎么在不同的winform容器(GroupBox)里实现 RadioButton &#xff08;如图中两个“详细照会”&#xff09;的单选&#xff0c;请各位牛人给出实现的思…

html调用接口_搜狗ocr识别接口

详细情况在代码中说明&#xff0c;如果不想自己使用TensorFlow&#xff0c;可使用下面接口这是要识别的图片&#xff1a;最终识别的结果&#xff1a;This is a lot of 12 point text to test theocr code and see if it works on all typesof file format.The quick brown dog …

CSAcademy Or Problem

传送门 一口大锅&#xff08; 斜率的确是有单调性 并且可以进行凸优化的 明明是证出来的 为什么自己就不相信呢&#xff08; 我们发现对于当前点作为扩展的右端点 那么他前面至多有20个点会影响到这一段区间的或值 我们可以预处理记录出来这些节点的位置 很明显 答案随着右端点…

模块定义文件导出类_浓缩的就是精华——ES6模块精炼讲解

概述在 ES6 前&#xff0c; 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库&#xff0c; 和基于 CMD 规范的模块化库)。ES6 引入了模块化&#xff0c;其设计思想是在编译时就能确定模块的依赖关系&#xff0c;以及输入和输出的变量。ES6 的模块化分为…

Jquery1.6版本后attr的变化

原文链接&#xff1a;http://www.cnblogs.com/-run/archive/2011/11/16/2251569.html Jquery1.6版本后attr的变化 Jquery1.6版本后 attr 改动后的效果&#xff1a; jquery1.6版本&#xff1a; 下文来自www.jquery.com The difference betweenattributes and properties can b…

idea main scanner 输入_哇晒,你竟然不知道idea的 Live Templates

最近公司新近来一名程序猿&#xff0c;在写代码时&#xff0c;美美写到System.out.println的时候&#xff0c;都要一母不差的用键盘敲上去&#xff0c;我问他你之前有用过eclipse中的快捷方法syso吗&#xff1f;于是&#xff0c;我给他介绍了一下&#xff0c;在idea中如何自定义…

偷梁换柱做自己的封装系统

偷梁换柱做自己的封装系统&#xff01;菜鸟一开始都想把自己的信息加到系统里&#xff0c;但封装系统只会一点&#xff01;但我们可“拿来”&#xff0c;我们可以用偷梁换柱的方法来修改别人的系统&#xff0c;本文以雨林的GHOST5.0系统为例。一、准备工作1、当然是下载一个自己…

台电u盘量产工具_简单几步,让U盘起死回生

如今&#xff0c;虽说云存储风靡&#xff0c;但U盘仍存在价值&#xff0c;毕竟在很多场合并不方便上网&#xff0c;即便如此网上存储有时也并不方便&#xff0c;也不安全。与此同时&#xff0c;如果是大文件存储&#xff0c;云盘上传和下载速度非常慢&#xff0c;并不适合海量数…

系统架构师 项目经理 哪个更有前景_中央空调加地暖与五恒系统,哪个更省钱?...

每逢严冬酷暑,人们都会感叹空调是最伟大的发明,并且随着科技发展还在不断进化。从烤火取暖到空调和地暖的供暖,从纸扇电扇的吹风到空调的制冷,人们的需求正在不断提高,于是,为了满足人们的需求&#xff0c;市场上又衍生出了家装五恒系统。 恒温、恒湿、恒氧、恒洁、恒静这…

c++直角坐标系与极坐标系的转换_一篇阅读量高达2百6十多万的关于坐标系和投影的相关知识探讨...

本文转载于CSDN作者rsyaoxin这是一篇关于坐标和投影的「神文」截止目前浏览量已达2698239是相关文章中不可打破的神话...文末有本文作者推荐的两款坐标转换的小工具下载链接回想一下&#xff0c;接触遥感专业也有几个年头了&#xff0c;而现在越来越偏离遥感了&#xff0c;突然…

query string parameters什么意思_public static void main(String[] args) 是什么意思?(转)...

public static void main(String[] args)&#xff0c;是java程序的入口地址&#xff0c;java虚拟机运行程序的时候首先找的就是main方法。一、这里要对main函数讲解一下&#xff0c;参数String[] args是一个字符串数组&#xff0c;接收来自程度序执行时传进来的参数。如果是在控…

b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?

当在使用浩辰CAD制图软件绘制图纸的过程中&#xff0c;经常要绘制由多个坐标点连接成的曲线时&#xff0c;有什么方便快捷的方法吗&#xff1f;那当然是有的。利用EXCEL表格保存数据并与CAD制图软件巧妙地结合起来&#xff0c;就能很容易地画出曲线。下面给大家详细介绍一下吧&…

阿里云服务器购买该如何选择?阿里云服务器购买步骤流程介绍...

很多第一次购买阿里云服务器&#xff0c;不知该如何选择适合自已的服务器。其实购买阿里云服务器&#xff0c;主要是根据自已网站的流量来决定的。如果网站流量不大&#xff0c;一天只有几百ip&#xff0c;一般选择1核cpu&#xff0c;1G内存&#xff0c;1MB带宽就可以用了&…

python 切片_全面解读Python高级特性切片

大家好&#xff0c;欢迎来到Crossin的编程教室&#xff01;众所周知&#xff0c;我们可以通过索引值(或称下标)来查找序列类型(如字符串、列表、元组…)中的单个元素&#xff0c;那么&#xff0c;如果要获取一个索引区间的元素该怎么办呢&#xff1f;切片(slice)就是一种截取索…

读书笔记(06) - 语法基础 - JavaScript高级程序设计

写在开头 本篇是小红书笔记的第六篇&#xff0c;也许你会奇怪第六篇笔记才写语法基础&#xff0c;笔者是不是穿越了。 答案当然是没有&#xff0c;笔者在此分享自己的阅读心得&#xff0c;不少人翻书都是从头开始&#xff0c;结果永远就只在前几章。对此&#xff0c;笔者换了随…

最近做了一个安装包的安装流程图

最近到做安装包的详细设计。下图是安装包的流程图&#xff0c;如果有什么意见和建议&#xff0c;希望大家给我留言&#xff0c;大家以前讨论 转载于:https://www.cnblogs.com/zengshengping815/archive/2009/04/22/1441319.html

idea tomcat启动成功但是访问方面都是404_IDEA相关配置【集成Tomcatamp;项目部署】...

“知其然知其所以然”始终是Brick我学习新兴技术的出发点&#xff0c;那么咱们来聊聊以下几个问题问题1&#xff1a;在编写完web项目之后&#xff0c;我们怎么才能运行项目呢&#xff1f;--需要部署项目到Tomcat上。问题2&#xff1a;部署项目到Tomcat服务器有多少种方式&#…

用U盘或移动硬盘安装Windows7 (超简单制作Win7安装U盘方法)

转载链接&#xff1a;http://www.iplaysoft.com/win7-usb-dvd-download-tool.html 最近很多人想要安装 Windows7 &#xff0c;下载回去后的ISO镜像文件很多人都是使用 Nero 或 IMGBurn 等工具刻录成光盘来安装的。但实际上&#xff0c;不需刻盘安装Win7的方法还是有不少的。…

安装pywin32时:ImportError: DLL load failed: %1 不是有效的 Win32 应用程序和 DLL load failed...

问题一&#xff1a;ImportError: DLL load failed: %1 不是有效的 Win32 应用程序 import pywinapi报错:ImportError: DLL load failed: %1 不是有效的 Win32 应用程序 原因&#xff1a;与python版本不对应 pypi官网上下载whl文件,我的python 版本为27 下载第一个后安装 下载文…

pointcut注解_Spring AOP使用指南,详细了解AOP相关注解

Spring AOP 指导教程什么是Spring AOP spring aop可以在spring构建的系统中使用面向切面编程。当然Spring Boot也是基于Spring构建的。使用AOP可以实现诸如事务&#xff0c;日志以及安全校验等通过切面统一完成的任务。他可以通过简单的注解方式实现在方法执行前后来执行你自己…