zoukankan      html  css  js  c++  java
  • Think PHP中URL_MODE相关事项

    官网上有关于URL_MODE的解释:http://document.thinkphp.cn/manual_3_2.html#url

    这里主要讲一下URL_MODE为2,即REWRITE模式。

    REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。

    这里可以看到,仅仅设置URL_MODE为2还不够,由于是重写,所以需要web服务器的重写规则。以apache为例:

    需要在入口文件的同级添加.htaccess文件,内容如下:

    1 <IfModule mod_rewrite.c>
    2  RewriteEngine on
    3  RewriteCond %{REQUEST_FILENAME} !-d
    4  RewriteCond %{REQUEST_FILENAME} !-f
    5  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    6 </IfModule>

    这只是添加了重写的规则,具体注释为:

    #伪静态和泛域名 
    #此文件禁止在行内注释
    <IfModule mod_rewrite.c>
    RewriteEngine on
     #禁止对图片等文件重写:没有这一条,所有的404都会执行index.php脚本,耗费大量资源。
    RewriteCond %{REQUEST_URI} !((.*).jpg|.jpeg|.bmp|.gif|.png|.js|.css)$
     #禁止对/public文件夹内重写,作用同上
    RewriteCond %{REQUEST_URI} !(^/public/(.*))$
    #如果是一个物理存在的目录,禁止重写
    RewriteCond %{REQUEST_FILENAME} !-d
    #如果是一个物理存在的文件,禁止重写
    RewriteCond %{REQUEST_FILENAME} !-f
    #上面2条不识别REQUEST_FILENAME时的替代写法
    #RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
    #RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
    #php api模式,服务器能识别PATH_INFO
    #RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    #php fastcgi模式 服务器不识别PATH_INFO
    RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]
    </IfModule>

    在添加规则前要确保web服务器的重写功能已经开启,并确保服务器能读取到.htaccess的配置,否则出现404错误。

    apache重写功能开启:

    在apache配置文件httpd.conf里面将LoadModule rewrite_module modules/mod_rewrite.so注释取消,这就开启了apache的重写支持。

    Allow Override:

    通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置
    AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型. 

    Allow Override 设置为None的时候,会完全忽略.htaccess,设置为All的时候,会读取所有的.htaccess配置。要保证rewrite正常,则至少要保证为FileInfo:

    < Directory /myblogroot/> 
        AllowOverride FileInfo 
    < /Directory> 

    以上几点全部做到后,URL_MODE=2才会生效,此时url里面就可以不需要INDEX.PHP了。

  • 相关阅读:
    [HNOI 2017]影魔
    [HNOI 2016]树
    [HNOI 2011]卡农
    [SCOI 2016]美味
    [SDOI 2011]染色
    [HNOI 2016]最小公倍数
    eclipse实现热部署和热加载
    mysql中时间比较的实现
    如何把本地项目部署到服务器上
    Linux部署项目和常用命令
  • 原文地址:https://www.cnblogs.com/clannadxr/p/7274164.html
Copyright © 2011-2022 走看看