• php中使用伪静态


    上次简单的说了下php中正则表达式的使用,这一次正则表达式可以派上用场了,学习伪静态需要能够很好的使用正则表达式,那么伪静态和真静态的区别是什么呢,我觉得应该是伪静态可以节约磁盘空间、利于SEO、访问速度上没有真静态那么快。伪静态也是对apache的rewrite机制的使用,下来就来分享下吧

    1.使用伪静态首先要确认打开rewrite模块

    首先打开httpd.conf,找到LoadModule rewrite_module modules/mod_rewrite.so去掉前面的#即可之后重启apache,使用phpinfo确认重写模块成功启用

    看到有红色这个就说明rewrite已经启用成功了


    2.使用伪静态要先在Directory里加一句AllowOverride All

    这一句可以加在apache的htdocs的Directory节点里或者虚拟主机的Directory节点里

    <Directory "D:/Program Files/Apache/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    之后的伪静态重写规则可以在Directory节点里写,也可以写在一个单独的.htaccess文件里,我强烈推荐使用后面这种方式

    3.apache指定首页面、错误页

    首先新建一个.htaccess文件,一般是先新建一个xx.txt文件另存为即可,这个文件我就放到项目的根目录,这个文件的内容如下

    DirectoryIndex index.php
    ErrorDocument 404 /static2/404.php

    下面先来测试404,我们先访问一个不存在的php看看404生效没有,这个是我的错误页面

    <?php
      echo "错误页面";
    ?>


    下面是运行截图

    首页的html如下

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>系统首页</title>
    </head>
    <body>
    欢迎
    </body>
    </html>


    我们直接把地址定位到根目录,回车后就能看到我们的这个首页了

    还有这么一种情况需要考虑那就是访问的时候apache列出目录结构的问题,其实很简单就在.htaccess加一句Options None,需要注意的是Directory里就不能配置Options了,否则会出现403错误


    4.伪静态的使用

    http://localhost/static2/view-sports-id5.html类似这种url我们应该见过很多了,这种就是一种伪静态的url了,我们看上去访问的是一个静态的html但其实不是,类似这种url像sports和id后面的5可能就是程序中要使用的参数,我们访问的其实是一个动态页面。这样的话比较利于SEO,下面上一段配置给大家看看

    <IfModule rewrite_module>
    RewriteEngine on 
    RewriteRule view-([a-zA-Z_]+)-id(d+).html news.php?type=$1&id=$2
    </IfModule>


    RewriteEngine on的意思是启用apache的rewrite引擎

    RewriteRule表示重写规则,第一个空格后面的是正则规范后面的news.php?type=$1&id=$2才是真正访问的php页面,$1表示前面正则规范的第一个子表达式的值,$2以此类推,这样我们就可以在news.php取得参数的值

    同样的如果是控制器也可以在相应文件夹里写一个.htaccess,之后加上我们的重写规则


    5.使用.htaccess来控制访问权限

    日常的开发中我们可能在项目里面写了DAO,控制器,工具类这一大堆的php,而这些文件我们是不希望别人通过浏览器访问到,这种情况使用session来限制似乎也不奏效,这种情况使用重写规则就很简单了

    RewriteRule [a-zA-Z0-9_]+.class.php 403.html

    这样写一句程序之外访问就跳转到另外一个页面,实现了访问的控制

    6.RewriteCond的使用

    有时我们需要判断在某种情况下才使用重写,这种情况就要使用RewriteCond了,例如我们可以判断请求的是不是一个文件(或不存在的文件),如果满足条件才执行重写规则

    #如果请求的不是一个文件
    RewriteCond %{REQUEST_FILENAME} !-f
    #并且不是一个目录
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ccc.html index.php

    这段配置的意思就是如果请求的ccc.html如果不存在则跳转到index,php

    再来看最后一段配置

    <ifModule rewrite_module>
    RewriteEngine On
    #你怎么知道,这个请求就是www.hsp.com发来的. referer
    #如果你请求的是一个jpg图片, 就禁止
    RewriteCond %{HTTP_REFERER} !www.hsp.com  
    RewriteRule .*.jpg -[F]
    </ifModule>

    [F]表示拒绝访问,其他的看看注释应该能看懂


    最后总结一下,日常开发中并不是所有的页面都要静态化,例如后台系统、基金股票等要求实时性很高的页面或网站、实时话费或流量查询页面、学历查询页面不适合静态化,对应内容相对稳定的例如宣传性质的网站首页可以考虑使用真静态,如果不想使用真静态但是又希望利于SEO伪静态应该是一个不错的选择。



  • 相关阅读:
    Hive安装教程
    HBase安装教程
    Hadoop集群搭建
    Redis集群安装详细步骤
    Python绘图工具turtle库的使用
    python程序语法元素分析
    Selenium请求库爬取京东商品实例
    python爬虫入门
    python入门
    pytest fixture场景一:参数传入
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3464751.html
Copyright © 2020-2023  润新知