zoukankan      html  css  js  c++  java
  • 关于apache 重定向设定

    本人在研究关于apache重定向的资料,在网上找了很多,但是就本人来说,方便理解的,找到了这么一个,记录了下来,原帖地址:http://www.exehack.net/8.html

    关于apache配置多域名,一般为两种方法。
    1.虚拟主机及利用mod_rewrite对URL进行重定向或伪链~
    2.虚拟主机配置方法,在httpd.conf文件最后简单添加,例如:<VirtualHost www.exehack.net>

    DocumentRoot usr/local/www/exehack
    ServerName www.exehack.net
    #ErrorLog logs/minidx.com-error_log
    #CustomLog logs/minidx.com-access_log common
    </VirtualHost>

    <VirtualHost www.baidu.com>
    DocumentRoot usr/local/www/baidu
    ServerName www.baidu.com
    </VirtualHost>

    这样在访问相关域名的时候便会跳转到对应的目录
    虚拟主机的最大缺点是性能消耗较大,并且似乎和APACHE用来托管静态文件、连接及负载均衡后台所用的mod_jk有冲突。
    所以个人不建议使用虚拟主机的方法去管理域名。
    利用mod_rewrite对域名进行重定向或伪链:
    首先需要开启mod_rewrite支持,在httpd.conf文件里搜索:

    #LoadModule rewrite_module modules/mod_rewrite.so

    去掉#号,开启mod_rewrite。
    继续搜索AllowOverride None更改为AllowOverride All,打开.htaccess的支持。
    注意AllowOverride是可以针对每个目录进行设置的,这里应该将apache DocumentRoot根路径设置为AllowOverride All:

    <Directory "/var/www/html">
    AllowOverride All
    </Directory>

    之后建立.htaccess文件放在DocumentRoot下,通过编写.htaccess来管理相关域名
    对域名进行301重定向,.htaccess中设置:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www.test.net.cn [NC,OR]
    RewriteCond %{HTTP_HOST} ^test.net.cn [NC]
    RewriteRule ^(.*)$ http://www.test.com/test.html$1 [R=301,L]
    RewriteCond %{HTTP_HOST} ^www.exehack.net [NC,OR]
    RewriteCond %{HTTP_HOST} ^exehack.net [NC]
    RewriteRule ^(.*)$ https://www.exehack.net/test1.html$1 [R=301,L]

    则访问www.test.net.cn或test.net.cn开头的域名会跳转到http://www.test.com/test.html
    www.exehack.net或exehack.net开头的域名会跳转到https://www.exehack.net/test1.html
    注意一些符号及参数:

    ^www.test.net.c表示以www.test.net.cn为开头,和所有语言一样,!代表否,即!^www.test.net.cn表示不以www.test.net.cn开头。
    对mod_rewrite来说,!是个合法的模板前缀,表示“非”的意思,
    这对描述“不满足某种匹配条件”的情况非常方便,或用作最后一条默认规则。
    当使用!时,不能在模板中有分组的通配符,也不能做后向引用。
    R 强制外部重定向,后面可以代301或302跳转。
    L 表明当前规则是最后一条规则,停止分析以后规则的重写。(如果满足条件的话)
    OR 或的意思,上例中既是www.test.net.cn或test.net.cn开头的域名。
    NC 不区分大小写。
    $N 引用RewriteRule模板中匹配的相关字串。
    例如上例中的https://www.exehack.net/test.html$1,我个人测试的结果是:
    访问http://www.exehack.net/132 会跳转到 http://www.exehack.net/test.html132
    这是个很有用的参数,如果去掉$1则无论http://www.exehack.net开头的地址后面的链接是什么,最后都会转向: 
    http://www.exehack.net/test.html
    重定向的缺点是域名无法保留,这一点是不推荐的,所以最好的方法还是对域名进行伪链接设置,写法也很简单,既去掉R=301,重写到当前 
    服务器的相关地址路径即可.

    最后附加一些关于参数的信息

    R[=code](force redirect) 强制外部重定向

    F(force URL to be forbidden)禁用URL,返回403HTTP状态码。

    G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。

    P(force proxy) 强制使用代理转发。 )

    L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。 
    N(next round) 重新从第一条规则开始运行重写过程。 
    C(chained with next rule) 与下一条规则关联 
    如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。

    T=MIME-type(force MIME type) 强制MIME类型 
    NS (used only if no internal sub-request) 只用于不是内部子请求

    NC(no case) 不区分大小写 
    QSA(query string append) 追加请求字符串

    NE(no URI escaping of output) 不在输出转义特殊字符

    例如:RewriteRule /foo/(.*) /bar?arg=P1/%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed +3a?` Z 
    PT(pass through to next handler) 传递给下一个处理

    例如: :5/Uh/ sX 
    RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理

    S=num(skip next rule(s)) 跳过num条规则

    E=VAR:VAL(set environment variable) 设置环境变量

  • 相关阅读:
    校易app-NABCD
    学习进度条week6
    编程珠玑(第二版)阅读笔记05
    四则运算(结对开发)
    编程珠玑(第二版)阅读笔记04
    学习进度条week5
    编程珠玑(第二版)阅读笔记03
    疫情统计可视化(三)
    编程珠玑(第二版)阅读笔记02
    spring注解
  • 原文地址:https://www.cnblogs.com/cnqfz/p/8603078.html
Copyright © 2011-2022 走看看