页面静态化3 --- 伪静态技术之Apache的rewrite机制
Apache的rewrite机制:
意思就是,你发送的地址,比如:http://localhost/news-id67.html会被Apache改写成http://localhost/news.php?id=67;
Apache本身内置了一个模块:(httpd.conf)
#LoadModule rewrite_module modules/mod_rewrite.so ---- 去掉注释,开启Apache内置的重写模块
开启模块过后,这个模块把news-id67.html重写为news.php?id=67
而后,Apache去解析的页面变为http://localhost/news.php?id=67.html
其实http://localhost/news.php?id=67.html这个页面时不存在的,而是Apache将news-id67.html这个部分的内容重写了一下。
附,原理图
下面要讨论的就是这个rewrite机制:
①如何配置rewrite
②如何写rewrite重写规则
使用rewrite步骤:
Ⅰ 检测Apache是否已经支持了mod_rewrite
①利用函数phpinfo()函数,Ctrl+F查找 Loaded-Modules 查看开启的模块列表中是否包含 mod_rewrite 模块,包括的话,则不需要配置这个模块。
②若没有配置,那么打开 httpd.conf 文件,Ctrl+F 查找 rewrite,去掉这行的注释,重启Apache服务器。
③如果没有找到这一行,那么找到 LoadModule 区域,在最后一行加入这句:LoadModule rewrite_module modules/mod_rewrite.so(要求独占一行),重启服务器。
Ⅱ 配置虚拟主机
①windows系统,找到C:\Windows\System32\drivers\etc\hosts 文件
在hosts文件中,添加IP和域名的对应关系
127.0.0.1 www.test.com
如图:
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
②在httpd.conf文件中,查找 Virtual hosts
#Virtual hosts 启用虚拟主机 #include conf/extra/httpd_vhosts.conf 把前面的注释去掉
Ⅲ 找到 httpd_vhosts.conf 文件,配置相应选项
<VirtualHost *:>
###SiteName test
DocumentRoot "G:/Visual-AMP/www/test"
ErrorLog "../../logs/Apache/G__Visual-AMP_www_medu-error.log"
TransferLog "../../logs/Apache/G__Visual-AMP_www_medu-access.log"
ServerName www.test.com #域名和上面hosts文件中对应的域名一样 ##配置rewrite机制 ## 访问G:/Visual-AMP/www/test 的权限设置和重写机制都在标签内写
<Directory "G:/Visual-AMP/www/test"> #Deny from all #拒绝所有访问 Allow from all #允许所有请求 #是否允许Apache在没有获取到内容时显示目录结构,默认是允许的,要禁止,则删除掉下面的 Indexes # 补充说明:虚拟主机的根目录和文件都在Apache服务器外,比如: #DocumentRoot "H:/VA-test/test" #Directory "G:/VA-test//test" --- 注意不是服务器的所在目录目录下面 //那么注释掉下面这句话就再访问,就会是 forbidden,打开就会列出列表
#Options Indexes FollowSymLinks Includes ExecCGI #或者在项目发布之后,这一行注释掉。 #是否启用rewrite机制
AllowOverride all #允许所有请求访问资源
Require all granted
</Directory>
</VirtualHost>
那么Directory之间的配置的默认配置是:在httpd.conf 中 Ctrl+F 查询 <Diretory 会找到配置项
因为我用的是集成环境,所以上面的DocumentRoot 和 Directory 中的路径应该是 和 httpd_vhosts.conf 中的地址对应,从而在httpd.conf中找到默认的值。
我这个集成环境下只有httpd.conf文件所以直接从httpd.conf找。
Ⅳ 配置重写规则
在对应的目录下,添加.htaccess 文件, 这个文件用来指定Apache的rewrite机制的规则的。
用记事本另存为文件名为 .htaccess 的文件,在其中写入rewrite规则
我们在转发的页面,也就是news.php 可以 通过 $id = $_GET['id'];获取到$id的值了。
而其中的RewriteRule可以设置多个规则,匹配顺序从上到下。
Ⅴ rewrite规则也可以直接在<Directory ''>段直接配置
<VirtualHost *:>
###SiteName test
DocumentRoot "G:/Visual-AMP/www/test"
ErrorLog "../../logs/Apache/G__Visual-AMP_www_medu-error.log"
TransferLog "../../logs/Apache/G__Visual-AMP_www_medu-access.log"
ServerName www.test.com #域名和上面hosts文件中对应的域名一样 ##配置rewrite机制 ## 访问G:/Visual-AMP/www/test 的权限设置和重写机制都在标签内写
<Directory "G:/Visual-AMP/www/test"> #Deny from all #拒绝所有访问 Allow from all #允许所有请求 #是否允许Apache在没有获取到内容时显示目录结构,默认是允许的,要禁止,则删除掉下面的 Indexes # 补充说明:虚拟主机的根目录和文件都在Apache服务器外,比如: #DocumentRoot "H:/VA-test/test" #Directory "G:/VA-test//test" --- 注意不是服务器的所在目录目录下面 //那么注释掉下面这句话就再访问,就会是 forbidden,打开就会列出列表
#Options Indexes FollowSymLinks Includes ExecCGI #或者在项目发布之后,这一行注释掉。 #是否启用rewrite机制
AllowOverride all #允许所有请求访问资源
Require all granted
#有时rewrite规则也可以直接在这个配置段配置,如果是配置再这里,那么.htaccess文件就可以不要了
RewriteEngine On
#RewriteRule 请求的URL正则 转发的页面
RewriteRule news-id(\d+)\.html$ news.php?id=$1
</Directory>
</VirtualHost>
Ⅵ
<VirtualHost *:10094>
###SiteName test
DocumentRoot "G:/Visual-AMP/www/test"
ErrorLog "../../logs/Apache/G__Visual-AMP_www_medu-error.log"
TransferLog "../../logs/Apache/G__Visual-AMP_www_medu-access.log"
ServerName www.test.com #域名和上面hosts文件中对应的域名一样 ##配置rewrite机制 ## 访问G:/Visual-AMP/www/test 的权限设置和重写机制都在标签内写
<Directory "G:/Visual-AMP/www/test"> #Deny from all #拒绝所有访问 Allow from all #允许所有请求 #是否允许Apache在没有获取到内容时显示目录结构,默认是允许的,要禁止,则删除掉下面的 Indexes # 补充说明:虚拟主机的根目录和文件都在Apache服务器外,比如: #DocumentRoot "H:/VA-test/test" #Directory "G:/VA-test//test" --- 注意不是服务器的所在目录目录下面 //那么注释掉下面这句话就再访问,就会是 forbidden,打开就会列出列表
#Options Indexes FollowSymLinks Includes ExecCGI #或者在项目发布之后,这一行注释掉。 #是否启用rewrite机制
AllowOverride all #允许所有请求访问资源
Require all granted
#有时rewrite规则也可以直接在这个配置段配置,如果是配置再这里,那么.htaccess文件就可以不要了
RewriteEngine On
#RewriteRule 请求的URL正则 转发的页面
RewriteRule news-id(\d+)\.html$ news.php?id=$1
</Directory>
#该 www/ 目录下有test2依然可以针对test2文件夹进行规则配置
<Directory "G:/Visual-AMP/www/test2"> Deny from all #拒绝所有访问 #Allow from all #允许所有请求 #是否允许Apache在没有获取到内容时显示目录结构,默认是允许的,要禁止,则删除掉下面的 Indexes # 补充说明:虚拟主机的根目录和文件都在Apache服务器外,比如: #DocumentRoot "H:/VA-test/test" #Directory "G:/VA-test//test" --- 注意不是服务器的所在目录目录下面 //那么注释掉下面这句话就再访问,就会是 forbidden,打开就会列出列表
#Options Indexes FollowSymLinks Includes ExecCGI #或者在项目发布之后,这一行注释掉。 #是否启用rewrite机制
AllowOverride all #允许所有请求访问资源
Require all granted
#有时rewrite规则也可以直接在这个配置段配置,如果是配置再这里,那么.htaccess文件就可以不要了
RewriteEngine On
#RewriteRule 请求的URL正则 转发的页面
RewriteRule news-id(\d+)\.html$ news.php?id=$1
</Directory> </VirtualHost>
因为每一个目录还可以单独进行配置,所以在单一目录下,还可以建立.htaccess,那么对应的配置段中的rewrite配置就可以注释掉。(或者在虚拟主机中配置段已经配置了rewrite规则,那么对应目录下就可以不建立.htaccess文件)
总结:
优点:方便实现对优化引擎的优化,比生成静态页面更加方便,首页每天自动变化
URL重写的缺点:效率不如真静态页面,每次都会有读数据库,这个可以通过缓存技术来处理。
下一节介绍,案例使用。
页面静态化3 --- 伪静态技术之Apache的rewrite机制的更多相关文章
- php&&页面静态化
页面静态化.主要是出于两个方面的考虑. 第一:訪问html页面的速度比訪问php页面的速度快.在訪问php页面时候.须要对php进行解析.訪问html时候,直接浏览器能够解析出来.特别是PV量 ...
- 页面静态化1 --- 概念(Apache内置压力测试工具使用方法)
三个概念 ①静态网址: http://127.0.0.1/regis.html ②动态网址:在请求页面时可以动态的传一些值进去. http://127.0.0.1/regis.php?id=45&am ...
- PHP 页面静态化/纯静态化/伪静态化
个人博客迁移至独立博客:https://blog.plcent.com/,欢迎大家访问 概念 PHP静态化分为:纯静态化 和 伪静态化:纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(二)
一:页面静态化 几个概念: 静态网址:(比如:http://localhost/abc.html) 特点:1.利用seo(search engine optimization) 搜索引擎优化;2:访问 ...
- PHP 404页面/如何设置404页面/URL静态化/URL伪静态化
php中如何设置404页面及其他错误页面 首先在项目根目录下新建文件,文件名为" .htaccess " 在该文件中写入一下配置项: ErrorDocument 404 /404. ...
- [Apache]网站页面静态化与Apache调优(图)
---------------------------------------------------------------------------------------------------- ...
- 各种系统性能优化技术,采用vilocity实现商品页面静态化
1.大型门户网站系统:>10万的访问量 行业网站(当当网,卓越网):20万-30万,一个小时内会跟数据库的交互至少20万-30万,会产生数据库瓶颈,每个数据库都有一个最大连接数(socket ...
- JSP页面静态化总结之一使用URLRewrite实现url地址伪静态化
JSP页面静态化总结之一使用URLRewrite实现url地址伪静态化 1使用URLRewrite实现url地址伪静态化1.1URLRewirte的用处 1.满足搜索引擎的要求. 2.隐藏技术实现,提 ...
- 页面静态化技术Freemarker技术的介绍及使用实例.
一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...
随机推荐
- ANT下载和配置
1) 在环境变量中设置ANT_HOME,值为你的安装目录ANT安装目录 2) 在环境变量中设置JAVA_HOME,值为你的jdk安装目录 3) 把ANT_HOME/bin,JAVA_HOME/bin ...
- BZOJ3906 : Trie
将输入的Trie建成AC自动机,并建出fail树. 那么操作1等价于在给定点的子树的并集里都加1. 操作2等价于查询给定点到根节点路径的并集的权值和. 求出DFS序后,对于操作1,将点按进入时间戳从小 ...
- HDU 1026 (BFS搜索+优先队列+记录方案)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 题目大意:最短时间内出迷宫.迷宫里要杀怪,每个怪有一定HP,也就是说要耗一定时.输出方案. 解 ...
- HTMl5/CSS3/Javascript 学习推荐资源
HTMl5/CSS3/Javascript 学习推荐资源 前端的定义应该是数据内容的展示,在国内大家都觉得前端只是HTML+CSS+Javascript,但是实际上与展示有关的都是前端,所以Ruby/ ...
- xamarin studio And linq 查询方式分析
在 Windows 操作系统可以正常读取网络上的 https 数据流,在 Linux 操作系统中会失败:http://www.cnblogs.com/skyivben/archive/2012/03/ ...
- idea_IDEA跑Tomcat异常
IDEA跑Tomcat异常 具体异常如下 Artifact :war exploded: Server is not connected. Deploy is not avail 根据别人的回答,去掉 ...
- jquery 获取input radio/checkbox 的值 【注意写法】
今天,在用jquery获取页面上radio值的时候,radio给出了默认值,但是无论如何修改值,radio始终是默认值,去掉默认值的时候,页面上又报出了undefined的错误.经过几番搜索,发现不同 ...
- sum()over()和count()over()分析函数
创建测试表 ),sales ),dest ),dept ),revenue number); 插入测试数据 ); ); ); ); ); ); ); commit; 查看表记录 SQL> sel ...
- 让IE下支持Html5的placeholder属性
HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等. Placeholder 是HTML5新增的另一个属性,当input或者textarea设 ...
- jquery-mobile表单提交问题
关于使用jquery-mobile表单提交遇到的问题 当你使用了jquery-mobile的时候,如果你在前台提交一个了一个form表单,而在后台你处理完业务逻辑之后想要重定向到另一个方法或页 ...