• .htaccess 的配置规则 + 无法使用原因


    linux下apache的 rewrite规则,不需要多说,没什么难度。

    在IIS下,配置URL重写、反向代理、伪静态少不了,IIS_REWRITE模块。

    破解版全功能下载:ISAPI_Rewrite3_full.zip(内含 官方中文文档,  以及  正则的一些基本知识)

    稍微总结下:

    ^匹配由此开始,   $匹配由此结束,   ()      []         \  等等正则知识

    开头:

    RewriteEngine On
    RewriteBase /

    ......

    1. 重写条件可以有多个,2.然后紧接着重写规则, 3.[p]反向代理   [NP]不区分大小写......

    重写条件有很多,比如:

    RewriteCond %{REQUEST_FILENAME} !-f       如果文件夹存在就不进行下面第一条重写

    RewriteCond %{REQUEST_FILENAME} !-d       如果文件存在就不进行下面第一条重写

    规则就更多了,再搭配上[P]   [NP]等其他匹配,更多:

    全站反向代理: RewriteRule    ^(.*)$    http://www.xxx.com/$1    [P]

    ...... 

    我不喜欢使用,ProxyPassReverse 指令   ProxyPass 指令 进行代理,因为RewriteRule规则  再搭配[P],不仅灵活,而且完全可以实现ProxyPassReverse指令。

    还有我发现很多WIN2003,不知道什么原因,在测试机器搭建OK。 直接搭建到其他机器不行,甚至根本不支持R。 估计也跟WIN2003版本,CPU位数,其他软件什么冲突...(原因见最后一段话)

    更多说明,参见上面的RAR文档。

    网载:

    这句话的意思是兼容Helicon 2.X httpd.ini 规则 ,Helicon 3.X版本的规则文件统一成了.htaccess

    RewriteEngine On
    RewriteCompatibility2 On
    RepeatLimit 200
    RewriteBase

    问题1:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    不起作用

    配置的时候加上文档的根目录:

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f

    问题2:

    'ornext|OR'(或下一条件):它以OR方式组合若干规则的条件,而不是隐含的AND。

    RewriteCond实例

    RewriteCond %{REMOTE_HOST} ^host1.* [OR]

    RewriteCond %{REMOTE_HOST} ^host2.* [OR]

    RewriteCond %{REMOTE_HOST} ^host3.*

    文档举例:

    藏匿网站上.asp文件扩展名的规则示例:

    RewriteEngine on
    #Redirect extension requests to avoid duplicate content
    RewriteRule ^([^?]+)\.asp$ $1 [NC,R=301,L]
    #Internally add extensions to request
    RewriteCond %{REQUEST_FILENAME}.asp -f
    RewriteRule (.*) $1.asp

     

    URL:http://www.mysite.com/foo.asp?a=A&b=B&c=C,而且你希望以这样的地址来访问它:http://www.myhost.com/foo.asp/a/A/b/B/c/C

    RewriteEngine on
    RewriteRule ^(.*?\.asp)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,LP,QSA]

    你可以使用更多通用的规则,从而把任何请求都映射到与请求主机名同名的文件夹里。

    RewriteEngine on
    #Fix missing trailing slash char on folders
    RewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]
    #Map requests to the folders
    RewriteCond %{HTTP:Host} ^(www\.)?(.+)
    RewriteRule (.*) /%2$1 [NS]

    初级防盗链:

    RewriteEngine on
    RewriteCond %{HTTP:Host}#%{HTTP:Referer} ^([^#]+)#(?!http://\1).+
    RewriteRule .*\.(?:gif|jpg|png) /block.gif [NC]

     

    301重定向规则。

    RewriteEngine on
    RewriteCond %{HTTPS} (on)?
    RewriteCond %{HTTP:Host} ^(?!www\.)(.+)$ [NC]
    RewriteCond %{REQUEST_URI} (.+)
    RewriteRule .? http(?%1s)://www.%2%3 [R=301,L]

    平衡负载均衡 仿真

    RewriteEngine on
    RewriteMap hosts rnd:hosts.txt
    RewriteCond %{HTTP:Host} (www)\.mysite.com [NC]
    RewriteRule (.*) http://${hosts:%1}.mysite.com$1 [R,L]

    下面是hosts.txt文件的内容

    www www1|www2|www3|www4|www5|www6|www7|www8|www9

     

     

     

    经过2次严格测试,所以不能搭建的IIS_REWRITE环境。 经过,权限设置全部OK。

    1. IIS_REWRITE的路径下面,给什么权限说不清楚,2台机器,一台给了OWNER权限解决问题。 一台给了EVERYONE权限才解决问题。

    2.站点路径下面的httpd.ini  或者  .htaccess 文件一个给了  IUSR权限解决问题 一个给了EVERYONE才解决问题。

    综上,都是权限问题。 索性将以上2处全部设置为EVERYONE权限。    放心,EVERYONE给了这2处,没有什么安全危机。   所以放心设置吧。

  • 相关阅读:
    SQL 脚本 重复执行 约束
    xiami 精选集
    PHP 5 环境配置
    Thread线程类
    创建线程
    C#中简单的正则表达式(也经常会用到的)
    线程的挂起与恢复
    C#操作INI文件
    多线程简介
    单线程简介
  • 原文地址:https://www.cnblogs.com/qunshu/p/3110476.html
Copyright © 2020-2023  润新知