• 沙里软件

  • ShaliSoft.com [手机站]   办公桌收纳抽屉
  • 首页
  • 博文
  • 演示
  • 管理
  • http.ini规则教程

    网络   2015/1/9 0:21:04

    httpd.ini是IIS的配置文件。windows主机器的网站以搭建在虚拟主机上,当我们用习惯了apache下的.htaccess的时候,很难想象windows主机上怎么实现它的强大功能。实际上windows主机服务器上的虚拟主机可以用httpd.ini文件来充当.htaccess文件在Linux主机空间的作用,不过要令你失望的是,httpd.ini的功能完全没有.htaccess那么强大,规则上没有那么丰富,细节上也有很大的不同。

    要在你的空间使用httpd.ini首先得确定你的空间是否支持该功能,可以询问服务商,如果是企业用户,可以要求服务商为你。

    功能

    我们来看一段简单的httpd.ini内容实现的功能,从这段代码开始:

    [ISAPI_Rewrite]

    RewriteRule /(.*).html /index.php?p=$1 [L]

    上面这段小代码不难让你想象它的功能,即先开启重写功能,然后执行一条规则,将根目录下后缀为.html的网址内容和/index.php?p=后面的内容匹配。你可以用这个网址来访问这个真实的地址。关于httpd.ini的部分规则,将会在下面的案例中一一讲到。

    域名定向

    [ISAPI_Rewrite]

    RewriteCond Host: ^$

    RewriteRule (.*) [R,I,L]

    上面这段代码实现了将重定向到。这种方法据说是有利有SEO的。

    [ISAPI_Rewrite]是开启重写能力的意思,每个单词都对应了英文的原意。

    RewriteCond提出条件,相当于IF。Host后面跟上域名,即条件内容,域名为情况下,执行下面的规则。^是开始标记,即域名以开始,$为结尾标记,即域名以结尾。整条语句的意思“重写条件 域名以u开头到com结束的情况下,往下执行”言外之意不符合则不执行。“”是转义字符,在httpd.ini中需要对这种index.php中间的点加以转义。

    RewriteRule则是指执行的规则。(.*)即第一个要匹配的内容,也就是说你的用这个东西将要代替另外一样。“.”指任意字符,“*”指这个字符重复0或更多次,如果是“+”意思为重复1或更多次。那么“(.*)”的意思就是指任意字符而且该字符可以随意重复N次,其实就是任意内容了。后面则是将前面的(.*)代替什么了,用$1表示。也就是说如果我输入的是不带WWW的那么实际上服务器将用带WWW的这个网址。这样就实现了域名的重定向。再举一例,如果规则为RewriteRule /(.*).html [R,I,L]那么只会当你用访问时跳转为静态路径。实际上这种方法我们只用在域名跳转上,不用在单独网页跳转上,从而实现301重定向。

    域名绑定

    [ISAPI_Rewrite]

    RewriteCond Host: ^$

    RewriteRule ^(.*)$ /$1 [I]

    RewriteCond Host: ^www.

    RewriteRule //(.*)$ [R,I]

    如果按照上面一段的分析,我想你应该能慢慢理解这段代码的内容:开启重写能力,如果访问的域名是,无论后面跟随什么,都代替/这个网址后面的内容,如果访问的网址是后面无论跟随什么内容,那么都将网址变为并后面用访问网址后面的内容代替。这样两个循环,实现了子目录/被绑定到上。

    frustigor找到了绑定子目录后将wordpress放在被绑定子目录下面的wordpress的固定链接的办法,虽然有些小缺陷,但总体上能实现这个想法。

    修改状态

    [ISAPI_Rewrite]

    # 3600 = 1 hour

    CacheClockRate 3600

    RepeatLimit 32

    # Protect httpd.ini and httpd.parse.errors files

    # from accessing through HTTP

    # Rules to ensure that normal content gets through

    RewriteRule /sitemap.xml /sitemap.xml [L]

    RewriteRule /favicon.ico/favicon.ico [L]

    RewriteRule /sitemap_baidu.xml /sitemap_baidu.xml [L]

    RewriteRule /sitemap.html /sitemap.html [L]

    RewriteRule /archivers/(.*) /archivers/$1 [L]

    # For file-based wordpress content (i.e. theme), admin, etc.

    RewriteRule /wp-(.*) /wp-$1 [L]

    # For normal wordpress content, via index.php

    RewriteRule ^/$ /index.php [L]

    RewriteRule /(.*) /index.php/$1 [L]

    这段代码的规则部分中你需要注意的是前面两句实现了你仍然可以访问这两个文件,如果没有这两句,你的wordpress会给出“未找到文章”的提示错误页面。接下来两句是让你可以访问/wap/和/content/uploads/这两个目录的规则。如果没有,那么无论你是访问该目录,还是从该目录下载东西,都将被wordpress返回未找到页面的提示。最后三句规则则是实现wordpress能够像在Linux上采用乐观的固定链接的形式的关键。每篇内容的网址都逃离了win主机wordpress固定连接顶层目录被加/index.php/的厄运,直接可以成为华丽的自定义网址。

    采用一种根据这接收地址来跳转的代码,如下:

    if($_GET['p']||$_GET['page_id']){

    if($_GET['p'])$id=$_GET['p'];

    if($_GET['page_id'])$id=$_GET['page_id'];

    $post= get_post($id);

    $name=$post->post_name;

    header(‘HTTP/1.1 301 Moved Permanently’);//

    header(‘Location: ‘.bloginfo(‘url’).’/’.$name.’/');

    exit();

    }else if($_GET['cat']){

    $id=$_GET['cat'];

    $cat=get_category($id);

    $name=$cat->slug;

    header(‘HTTP/1.1 301 Moved Permanently’);//

    header(‘Location: ‘.bloginfo(‘url’).’/cat/’.$name.’/');

    exit();

    }else if($_GET['tag']){

    $name=$_GET['tag'];

    header(‘HTTP/1.1 301 Moved Permanently’);//

    header(‘Location: ‘.bloginfo(‘url’).’/tag/’.$name.’/');

    exit();

    }

    另外,这种方法还要让wordpress支持中文转码网址,必须修改wordpress源文件:

    修改网站目录下wp-include/classes.php文件(请先行备份):

    (最新3.1版需要修改的文件是wp-include/class-wp.php)

    第一步:找到

    $pathinfo= $_SERVER['PATH_INFO'];

    修改为

    $pathinfo= mb_convert_encoding($_SERVER['PATH_INFO'], ‘UTF-8′, ‘GBK’);

    第二步:找到

    $req_uri = $_SERVER['REQUEST_URI'];

    修改为

    $req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], ‘UTF-8′, ‘GBK’);

    就这样,中文的TAG标签页等都可以打开了的。

    用法

    zblog2.0放于二级目录静态化httpd.ini的设置方法

    这里的httpd.ini必须放于根目录,而不是二级目录下面

    httpd.ini的设置代码:

    RewriteRule ^(.*?)default_([0-9]+).html $1catalog\.asp\?page=$2

    RewriteRule ^(.*?)category-([0-9]+)\.html $1catalog\.asp\?cate=$2

    RewriteRule ^(.*?)category-([0-9]+)_([0-9]+)\.html $1catalog\.asp\?cate=$2&page=$3

    RewriteRule ^(.*?)author-([0-9]+)\.html $1catalog\.asp\?auth=$2

    RewriteRule ^(.*?)author-([0-9]+)_([0-9]+)\.html $2catalog\.asp\?auth=$2&page=$3

    RewriteRule ^(.*?)tags-(.*)\.html $1catalog\.asp\?tags=$2

    RewriteRule ^(.*?)tags-(.*)_([0-9]+)\.html $1catalog\.asp\?tags=$2&page=$3

    RewriteRule ^(.*?)([0-9\-]+)\.html $1catalog\.asp\?date=$2

    RewriteRule ^(.*?)([0-9\-]+)_([0-9]+)\.html $2catalog\.asp\?date=$2&page=$3

    直接复制,粘贴到httpd.ini里面即可。

    后台需要开启静态化,这个设置是默认的设置,如果是自行设置的,请根据实际情况修改即可。

    ISAPI_Rewrite 规则对大小写敏感,偶google了大半天,终于知道如何忽略大小写了
    I (ignore case)不管大小写强行指定字符匹配
    例:RewriteRule /code/project/([0-9,a-z]*).html /soft.jsp\?softpy=$1 [I]

    其他的参数一览
    I (ignore case)
    不管大小写强行指定字符匹配,这个FLAG影响RewriteRule指令和相应的RewriteCond 指令

    F (Forbidden)
    对客户端做反应,停止REWRITING进程并且发送403错误,注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。

    L (last rule)
    不应用任何重写规则在此停止重写进程,使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写

    N (Next iteration)
    强制REWRITINGENGINE调整规则目标并且从头重启规则检查(所有修改将保存),重启次数由RepeatLimit指定的值限制,如果这个数值超过N FLAG将被忽略

    NS (Next iteration of the same rule)
    以N标记工作不从相同的规则重启规则规则进程(例如强制重复规则应用),通过RepeatLimit指令指定一个反复实行某一规则的最大数目,

    P (force proxy)
    强制目的URI在内部强制为代理需求并且立即通过ISAPI扩展应付代理需求,必须确认代理字符串是一个有效的URI包括协议 主机等等否则代理将返回错误

    R (explicit redirect)
    强制服务器对客户端发出重定向指示即时应答,提供目的URI的新地址,重定向规则经常是最后规则

    RP (permanent redirect)
    几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码

    U (Unmangle Log)
    当URI是源需求而不是重写需求时记载URI

    O (nOrmalize)
    在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的

    CL (Case Lower)
    小写

    CU (Case Upper)
    大写


    RewriteHeader directive
    Syntax: RewriteHeader HeaderName Pattern FormatString [Flags]
    这个指令是RewriteRule的更概括化变种,它不仅重写URL的客户端需求部分,而且重写HTTP头,这个指令不仅用于重写。生成,删除任何HTTP头,甚至改变客户端请求的方法

    HeaderName
    指定将被重写的客户头,可取的值与 RewriteCond 指令中TestVerb参数相同

    Pattern
    限定规则表达式以匹配Request-URI,

    FormatString
    限定将生成新的URI的FormatString

    [Flags]
    是一个下列FLAGS的命令分隔列表

    I (ignore case)
    不管大小写强行指定字符匹配,这个FLAG影响RewriteRule指令和相应的RewriteCond 指令

    F (Forbidden)
    对客户端做反应,停止REWRITING进程并且发送403错误,注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。

    L (last rule)
    不应用任何重写规则在此停止重写进程,使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写

    N (Next iteration)
    强制REWRITINGENGINE调整规则目标并且从头重启规则检查(所有修改将保存),重启次数由RepeatLimit指定的值限制,如果这个数值超过N FLAG将被忽略

    NS (Next iteration of the same rule)
    以N标记工作不从相同的规则重启规则规则进程(例如强制重复规则应用),通过RepeatLimit指令指定一个反复实行某一规则的最大数目,

    R (explicit redirect)
    强制服务器对客户端发出重定向指示即时应答,提供目的URI的新地址,重定向规则经常是最后规则

    RP (permanent redirect)
    几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码

    U (Unmangle Log)
    当URI是源需求而不是重写需求时记载URI

    O (nOrmalize)
    在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的

    CL (Case Lower)
    小写
    CU (Case Upper)
    大写


    阅读(1129) 分享(0)

    上一篇: SQL Server中为标识(IDENTITY)列插入显式值,插入自动编号
    下一篇: 网站怎么防采集又同时不限制蜘蛛?

  • 精彩推荐

    ◆ EditPlus 添加文件比较工具winmerge
    ◆ JS日期格式化扩展函数
    ◆ js判断手机网络类型
    ◆ asp.net怎么实现多线程断点续传?
    ◆ 前端性能优化 - 网页图片资源预加载
    ◆ httpd.ini手册
    ◆ IIS下PHP is_dir()/mkdir() 绝对路径目录BUG
    ◆ 什么是DNS劫持和DNS污染?谈谈运营商的流氓DNS劫持。
    ◆ php木马 隐藏在JPG图片EXIF头部中的恶意软件
    ◆ 中国市场的个人版WinRAR软件完全免费了
  • 用心做事 不能唯利是图

    • 吊儿
    • 用QQ联系我17905772
  • 搜索


  • 最新文章

    • 导出Excel 格式 mso-number-format
    • 服务器iis支持tls1.2,windows server 2008 r2 中IIS启用TLS 1.2(安装SSL后用TLS 1.2)
    • MySQL配置优化
    • EditPlus 添加文件比较工具winmerge
    • 滚动悬浮固定JS特效

  • 热门文章

    • php sso单点登录实现代码
    • 中国菜刀(China chopper) 最新黑客工具
    • redis.conf中文版(基于2.4)
    • 搜索引擎名单大全
    • php图片上传类,支持加水印,生成略缩图

  • 最新图库


  • 最新评论


  • 友情链接

  • 沙里软件

  • 最近访客

    Powered by ShaliSoft.com 豫ICP备13008529号

    免责声明:本站部分内容来源于互联网,转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责,也不构成任何其他建议。如果发现侵犯版权,联系QQ17905772进行删除。