zoukankan      html  css  js  c++  java
  • htaccess文件配置说明-(持续更新中)

    简介:

    htaccess是apache的配置文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表等功能。

    启用.htaccess,需要修改httpd.conf,启用AllowOverride。同时.htaccess与httpd.conf配置文件不同的是,它只作用于当前目录。另外httpd.conf只是在Apache服务启动的时

    候就加载的,而.htaccess只要有用户访问目录时加载,开销大、速度慢。

      既然如此,为什么我们还要用.htaccess呢?因为它配置起来简单,它还支持重定向、URL重写以及访问验证,另外它管理起来很方便,可以很好适应网站迁移。总之,各有优缺点,主要就看你是要从全局考虑还是只配置单个目录。下面来看看一些常用的配置的一些说明:

    “RewriteEngine On”,开启 Rewrite 规则开关;

    “RewriteCond”指重写的条件

    RewriteCond %{REQUEST_FILENAME} !-f  如果不是文件继续执行下面的RewriteRule(理解为:如果文件存在,就直接访问文件,不进行下面的RewriteRule)

    RewriteCond %{REQUEST_FILENAME} !-d 如果不是目录继续执行下面的RewriteRule(理解为:如果目录存在就直接访问目录不进行RewriteRule)

    “RewriteRule”,定义一条重写规则,后面的字符串通过正则表达式进行匹配,匹配字符串以 ^ 开头并以 $ 结尾,替换字符串中 $1 指被第一次被匹配成功的字符串

    %{HTTP_REFERER} 指获取当前访问请求的来源网址

    常用配置:

    1)、阻止通过读取和写入 .htaceess 来更改服务器安全性的设置

    <files .htaccess>
    order allow,deny
    deny from all
    </files> 

    2)、限制文件上传大小(这个能够帮助阻止 DoS 攻击(用户通过上传巨大的文件来冲垮服务器)并且能够节约带宽。)

    # limit file uploads to 10mb
    LimitRequestBody 10240000

    3)、自定义错误页面

    ErrorDocument 404 /notfound.php
    ErrorDocument 403 /forbidden.php
    ErrorDocument 500 /error.php

    4)、禁止访问目录

    # disable directory browsing
    Options All -Indexes

    5)、图片防盗链(当有人试着直接链接到你的网站上图片,下面的代码将会使其显示 stealingisbad.gif 这张图片。

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://(www.)?yourdomain.com/.*$ [NC]                 (NC表示不区分大小写)
    RewriteRule .(gif|jpg|png)$ http://www.yourdomain.com/stealingisbad.gif [R,L]        (R表示跳转,L表示最后一条重写规则)
    #注释:如果请求地址不为空,或者不是www.yourdomain.com、yourdomain.com的 后缀为git|jpg|png的,转到stealingisbad.gi

    6)、顶级域名重定向到二级域名上(优化和提高网站搜索排名)

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^yourdomain.com$ [NC]
    RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

     附加:

    rewrite重写时,带参数:

      RewriteRule 不会去匹配?后面的参数,需要用RewiteCond 来匹配

      例如:把 /abc?id=123 重定向到 /def.php?id=123 的写法:
      方式一:
      

    RewriteEngine on
    RewriteBase /
    RewriteCond %{QUERY_STRING} ^id=(.+)$
    RewriteRule ^/abc$ /def.php?sid=%1 [L]

    #注释1:RewriteCond %{QUERY_STRING} ^id=(.+)$ ,得到url中的变量,并通过“%N”的方式获取(参数名可以重写,而且参数值可以匹配)
    #注释2:RewriteCond 里面需要提取的值可以用 %N 进行反向引用值,而RewriteRule里面还是需要用$N的来反向引用值

    如果 http://127.0.0.1/rewrite/jeecn.zdz?par=helloforbworld 中的 query_string包含字符串forb ,则禁止访问

    RewriteCond %{QUERY_STRING} forb
    RewriteRule ^(.*).(.*)$ preg.php?%{QUERY_STRING} [F]


    eg.2
    通过[QSA]标志保留原有URL参数的同时,在后面增加新的URL参数:param=value

    RewriteRule ^/page /page?param=value [QSA]


    eg3.
    URL参数包含字符串parm时
    URL:http://jeecn.com/ask?param=value 重写为: http://jeecn.com/answer?param=value

    RewriteCond %{QUERY_STRING} parm
    RewriteRule ^/ask /answer



    eg4.%n反向引用
    1)当访问 /path 时,将字符串 parm修改为 showparm

    RewriteCond %{QUERY_STRING} ^(.*)parm(.*)$
    RewriteRule /path /path?%1showparm%2


    上面的%1和%2是反向引用,来自之前的RewriteCond中正则表达式的匹配结果

    2)将http://jeecn.com/path?key=value 转换为: http://jeecn.com/path/key/value

    RewriteCond %{QUERY_STRING} ^(w+)=(w+)$
    RewriteRule ^/path /path/%1/%2?

    方式二:

    RewriteEngine on
    RewriteBase /
    RewriteRule ^/abc$ /def.php [L,QSA]

    #注释1:[QSA]表示保留重写url时“?”后面的参数(但参数名不可以重写,只会原样的保留)

     

      

    正则(这里只列出部分的,其他的正则遵循正则表达式):

    RewriteCond语法参数:

    # 位于行首时表示注释。

    -d 测试字符串是否是已存在的目录

    -f 测试字符串是否是已存在的文件

    -s 测试字符串所指文件是否有"非零"值(非空的常规文件)

    -l视为一个路径名并测试它是否为一个存在的符号连接(符号连接)

    -x(可执行)视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测

    RewriteRule语法参数:

    [F] Forbidden(禁止) : 命令服务器返回 403 Forbidden错误给用户浏览器

    [L] Last rule(最后一条规则) : 告诉服务器在本条规则执行完后停止重写URL

    [N] Next(下一条规则) : 告诉服务器继续重写,指导所有重写指令都执行过

    [G] Gone(丢失) : 命令服务器返回410 GONE(no longer exists)错误消息

    [P] Proxy(代理) : 告诉服务器通过mod_proxy模块处理用户请求

    [C] Chain(捆绑) : 告诉服务器将当前的规则和前面的规则进行捆绑

    [R] Redirect(重定向) : 命令服务器发出重定向消息,以便用户浏览器发出rewritten/modified(重写/修改)URL的请求

    [NC] No Case(不区分大小写) : 对客户端请求的URL不区分大小写

    [PT] Pass Through(放行) : 让mod_rewrite模块将重写的URL传回给Apache做进一步处理

    [OR] Or(逻辑或) : 用逻辑"或"将两个表达式连接在一起,如果结果为"真",则会应用后继的相关规则

    [NE] No Escape(禁用转义) : 命令服务器在输出时禁用转义字符

    [NS] No Subrequest(禁用子请求) : 如果存在内部子请求,则跳过当前命令

    [QSA] Append Query String(追加查询字符串) : 命令服务器在URL末尾追加查询字符串

    [S=x] Skip(跳过) : 如果满足某指定的条件,则跳过后面第x调规则

    [E=variable:value] Environmental Variable(环境变量) : 命令服务器将值value赋给变量variable

    [T=MIME-type] Mime Type(MIME类型) : 声明目标资源所属的MIME类型

    例如thinkphp隐藏index.php:

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

    上面部分摘抄自sjy之家:http://www.sjyhome.com/htaccess

  • 相关阅读:
    Unity Behaviors for Interception
    Unity Method Dependency Injection
    Unity的AdditionalInterfaces问题
    Unity的三种Interceptor
    C#实现office文档转换为PDF或xps的一些方法
    多级菜单CSS+DIV
    应用软件系统架构设计的“七种武器”(转)
    AjaxModalPopupExtender
    越来越苦,献给狗日的小温
    NHibernate教程
  • 原文地址:https://www.cnblogs.com/flyxiangshang/p/5336318.html
Copyright © 2011-2022 走看看