页面静态化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  *: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

       
        </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  *: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>
   </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机制,布布扣,bubuko.com

时间: 2024-08-04 17:43:33

页面静态化3 --- 伪静态技术之Apache的rewrite机制的相关文章

页面静态化3 --- 伪静态技术

伪静态: 上一节我们讲了真静态技术的几个优点: ①减少服务器对数据响应的负荷: ②加载不用调动数据库 ③方便优化引擎 但同时伴随着缺点: ①生成的真静态文件多,服务器对html文件的响应负担也比较重: ②空间占用比较大. 如果一个系统使用真静态进行页面静态化,需要生成海量的静态页面,我们可以考虑使用伪静态来处理 目前业内最喜欢用的一个技术是(伪静态技术+ob的组合)技术 首先复习以下正则表达式: //PHP中如何使用正则表达式?---案例 $str = 'abcdeft1234 ghirh 56

PHP页面静态化3(PHP缓存机制详解)

我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output buffer是php自带缓存,可以通过配置php.ini关闭,程序缓存是一直开启状态,没法关闭.程序缓存中内容没法修改,output buffer中内容可以修改,修改完成后全部发给程序缓存. 一个网页对应一个消息,消息包括消息头和消息体,每个消息必须有消息头,消息体可以为空,如果程序中没有定义消息头,使用默认的. 由图可知

页面静态化1---概念(Apache内置压力测试工具使用方法)

三个概念 ①静态网址: http://127.0.0.1/regis.html ②动态网址:在请求页面时可以动态的传一些值进去. http://127.0.0.1/regis.php?id=45&title=今天天气不错 ③伪静态网址: 伪静态仅仅是对动态网址的一个重写,伪静态网址不能让动态网址静态化,搜索引擎不会认为伪静态就是HTML文档,其次伪静态可取,但是应把重心放在取出冗余参数.规范URL,竟可能的避免重复也等等. 举例说明:http://v.youku.com/v_show/id_XM

网站优化—页面静态化技术

数据库检索的问题 主要是为了减少数据库的操作,让MySQL能够提供更强大的服务 ? 使用缓存技术 磁盘缓存:就是将用户请求数据库的数据,保存到磁盘文件形成一个静态的HTML文本,下次用户的访问的时候,直接返回该HTML文本. 内存缓存:将MySQL的数据取出之后,保存到内存(memcache,不算一个NOSQL数据库,但是是一个缓存系统)之中,下次直接从内存中返回.(效率非常高) 注意:只要不使用sql语句作为查询条件的数据库(仓库)就叫做NOSQL数据库 优化MySQL 设计:存储引擎的选择,

PHP 页面静态化/纯静态化/伪静态化

概念 PHP静态化分为:纯静态化 和 伪静态化:纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新生成一张相同的网页,优点就是减小服务器开销, 局部静态化:是生成的静态文件中,有局部的数据还是通过ajax技术动态获取的: 完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的html页面 伪静态化:其实还是动态访问,其实质是动态生成数据,你访问的网址类似于"http://yourhost,c

网站页面静态化与Apache调优(图)

------------------------------------------------------------------------------------------------------- 概念=> 静态网址(静态页面):  1.利于seo 2.访问速度块 3.防止sql注入 动态网址(php页面,可传参数):1.不利seo 2.访问速度慢 3.有被注入sql可能 伪静态(对动态网址的重写):  1.利于seo 2.防止注入 3.仍然访问数据库,访问速度没有变化 [email 

各种系统性能优化技术,采用vilocity实现商品页面静态化

1.大型门户网站系统:>10万的访问量   行业网站(当当网,卓越网):20万-30万,一个小时内会跟数据库的交互至少20万-30万,会产生数据库瓶颈,每个数据库都有一个最大连接数(socket),一般服务器连接数2000个,如果超过2000,后面连接就会处于等待,在某一时间(短暂)内,有1万人访问了该产品页面,会跟数据库发生1万次交互,在这么短时间内,数据库处理能力是有限(如只能处理2000个连接),则8000个处于等待状态,等待超时的30s内可以再处理5000个链接,还有3000个连接 1)

四,真静态技术实现页面静态化

真静态技术解决了php缓存机制的缺陷,它的优点有三个:(1)减少服务器对数响应的负荷:(2)加载不用调动数据库,响应速度快:(3)便于优化引擎.但是真静态技术也存在一定缺陷.比如:(1)空间占用比较大:(2)生成的文件多了,服务器对html文件的响应负担也比较重. 一个系统使用真静态进行页面静态化,需要生成海量页面静态文件,可以考虑使用伪静态来处理.可以继续优化:

页面静态化之动态,静态,伪静态概念

页面静态化作为大型网站提速的三大技术之一也是非常重要的,另外还有Memcached和mysql优化技术. 所以,我们应该先对静态,动态,和伪静态的概念要做到了解. 所谓静态:在我个人看来就是单纯的html网页.一般来说仅用来查看. 而动态:绝对不是能动的网页,而是用户能够和服务器进行动态数据交互.如表单数据提交到服务器等 而伪静态:就是隐藏动态网页的数据,以静态的网页的格式展现. 在学习静态化技术之前,要知道的是,动态的数据交互不利于收索引擎的搜索,而必须seo(搜索引擎优化),更不利于减小服务