`
varsoft
  • 浏览: 2509209 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

apche IIS .htaccess httpd.ini Rewrite RewriteRule详解

 
阅读更多

apche IIS .htaccess httpd.ini Rewrite RewriteRule详解

 

1、Rewrite规则简介:

Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。

基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。

基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。

2、举例说明:

下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.cwbgj.com和203.81.23.202都跳转到主机前缀为http://www.cwbgj.com,避免当用户在地址栏写入http://cwbgj.com时不能以会员方式登录网站。

NameVirtualHost 192.168.100.8:80

ServerAdmin webmaster@cwbgj.com 
DocumentRoot "/web/webapp" 
ServerName www.cwbgj.com 
ServerName cwbgj.com 
RewriteEngine on #打开rewirte功能 
RewriteCond %{HTTP_HOST} !^www.cwbgj.com [NC] #声明Client请求的主机中前缀不是www.cwbgj.com,[NC]的意思是忽略大小写 
RewriteCond %{HTTP_HOST} !^203.81.23.202 [NC] #声明Client请求的主机中前缀不是203.81.23.202,[NC]的意思是忽略大小写 
RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空,[NC]的意思是忽略大小写 
RewriteRule ^/(.*) http://www.cwbgj.com/ [L]
#含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.cwbgj.com/,[L]意味着立即停止重写操作,并不再应用其他重写规则。这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的(.*)字符。


例二.将输入 folio.jaeer.com 的域名时跳转到profile.jaeer.com

listen 8080
NameVirtualHost 10.122.89.106:8080 
ServerAdmin webmaster@cwbgj.com
DocumentRoot "/usr/local/www/apache22/data1/"
ServerName profile.jaeer.com
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^folio.jaeer.com [NC]
RewriteRule ^/(.*) http://profile.jaeer.com/ [L]

3.Apache mod_rewrite规则重写的标志一览

1) R[=code](force redirect) 强制外部重定向
强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。
2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。
3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。
4) P(force proxy) 强制使用代理转发。
5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N(next round) 重新从第一条规则开始运行重写过程。
7) C(chained with next rule) 与下一条规则关联

如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。

8) T=MIME-type(force MIME type) 强制MIME类型
9) NS (used only if no internal sub-request) 只用于不是内部子请求
10) NC(no case) 不区分大小写
11) QSA(query string append) 追加请求字符串
12) NE(no URI escaping of output) 不在输出转义特殊字符
例如:RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed
13) PT(pass through to next handler) 传递给下一个处理
例如:
   RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理
   Alias /def /ghi 
14) S=num(skip next rule(s)) 跳过num条规则
15) E=VAR:VAL(set environment variable) 设置环境变量

4.Apache rewrite例子集合

   在 httpd 中将一个域名转发到另一个域名虚拟主机世界近期更换了域名,新域名为 www.wbhw.com, 更加简短好记。这时需要将原来的域名webhosting-world.com, 以及论坛所在地址 webhosting-world.com/forums/定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到,比如原来的http://www.webhosting-world.com/forums/-f60.html, 让它在新的域名下继续有效,点击后转发到http://bbs.wbhw.com/-f60.html, 这就需要用 apache 的 Mod_rewrite 功能来实现。

在中添加下面的重定向规则:

RewriteEngine On
# Redirect webhosting-world.com/forums to bbs.wbhw.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]
# Redirect webhosting-world.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]

添加了上面的规则以后, 里的全部内容如下:

ServerAlias webhosting-world.com
ServerAdmin admin@webhosting-world.com
DocumentRoot /path/to/webhosting-world/root
ServerName www.webhosting-world.com
RewriteEngine On
# Redirect webhosting-world.com/forums to bbs.wbhw.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]
# Redirect webhosting-world.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]

URL重定向

例子一:

1.http://www.csdn.cc/xxx.php-> http://www.csdn.cc/xxx/ 
2.http://yyy.csdn.cc-> http://www.csdn.cc/user.php?username=yyy 的功能 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www.csdn.cc 
RewriteCond %{REQUEST_URI} !^user\.php$ 
RewriteCond %{REQUEST_URI} \.php$ 
RewriteRule (.*)\.php$ http://www.csdn.cc/$1/ [R] 
RewriteCond %{HTTP_HOST} !^www.csdn.cc 
RewriteRule ^(.+) %{HTTP_HOST} [C] 
RewriteRule ^([^\.]+)\.zzz\.com http://www.csdn.cc/user.php?username=$1

例子二:

/type.php?typeid=*   --> /type*.html
/type.php?typeid=*&page=*   --> /type*page*.html
RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]
RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]

5.使用Apache的URL Rewrite配置多用户虚拟服务器

   要实现这个功能,首先要在DNS服务器上打开域名的泛域名解析(自己做或者找域名服务商做)。比如,我就把 *.cwbgj.com和 *.semcase.cn全部解析到了我的这台Linux Server上。

然后,看一下我的Apache中关于*.cwbgj.com的虚拟主机的设定。

#*.com,*.osall.net

ServerAdmin webmaster@cwbgj.com
DocumentRoot /home/www/www.cwbgj.com 
ServerName dns.cwbgj.com
ServerAlias dns.cwbgj.com cwbgj.com semcase.net *.cwbgj.com *.semcase.net 
CustomLog /var/log/httpd/osa/access_log.log" common
    ErrorLog /var/log/httpd/osa/error_log.log"
AllowOverride None
Order deny,allow 
#AddDefaultCharset GB2312    
   
      
RewriteEngine on       
RewriteCond %{HTTP_HOST}        ^[^.]+\.osall\.(com|net)$       
RewriteRule ^(.+)     %{HTTP_HOST}$1   [C]       
RewriteRule ^([^.]+)\.osall\.(com|net)(.*)$
/home/www/www.cwbgj.com/sylvan$3?un=$1&%{QUERY_STRING} [L]


在这段设定中,我把*.semcase.net和*.cwbgj.com 的Document Root都设定到了 /home/www/www.cwbgj.com

但是,继续看下去,看到...配置了吗?在这里我就配置了URL Rewrite规则。
RewriteEngine on #打开URL Rewrite功能
RewriteCond %{HTTP_HOST} ^[^.]+.osall.(com|net)$ #匹配条件,如果用户输入的URL中主机名是类似 xxxx.cwbgj.com 或者 xxxx.semcase.cn 就执行下面一句
RewriteRule ^(.+) %{HTTP_HOST}$1 [C] #把用户输入完整的地址(GET方式的参数除外)作为参数传给下一个规则,[C]是Chain串联下一个规则的意思
RewriteRule ^([^.]+).osall.(com|net)(.*)$ /home/www/dev.cwbgj.com/sylvan$3?un=$1&%{QUERY_STRING} [L]
# 最关键的是这一句,使用证则表达式解析用户输入的URL地址,把主机名中的用户名信息作为名为un的参数传给/home/www/dev.cwbgj.com目录下的脚本,并在后面跟上用户输入的GET方式的传入参数。并指明这是最后一条规则([L]规则)。注意,在这一句中指明的重写后的地址用的是服务器上的绝对路径,这是内部跳转。如果使用http://xxxx这样的URL格式,则被称为外部跳转。使用外部跳转的话,浏览着的浏览器中的URL地址会改变成新的地址,而使用内部跳转则浏览器中的地址不发生改变,看上去更像实际的二级域名虚拟服务器。

例子:

<FilesMatch "\.(bak|inc|lib|sh|tpl|lbi|dwt)$">
    order deny,allow
    deny from all
</FilesMatch>

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(flowerworld.cn)(:80)? [NC]
RewriteRule ^(.*) 
http://www.losoin.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(
www.flowerworld.cn)(:80)? [NC]
RewriteRule ^(.*) 
http://www.losoin.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(losoin.com)(:80)? [NC]
RewriteRule ^(.*) 
http://www.losoin.com/$1 [R=301,L]

 


RewriteRule ^index\.html$    index\.php [QSA,L]
RewriteRule ^m\.html$   view/admin/adminView\.php?pageAction=quit [QSA,L]

RewriteRule ^info/([0-9]+)\.html$ view/infoView.php?pageAction=viewInfo&id=$1 [QSA,L]
RewriteRule ^sell/([0-9]+)\.html$ view/module/sellView.php?pageAction=viewSellInfo&sellId=$1 [QSA,L]

RewriteRule ^superMarket/([0-9]+)\.html$ view/module/superMarketView.php?pageAction=viewSuperMarketInfo&superMarketId=$1 [QSA,L]

RewriteRule ^product/([0-9]+)\.html$ view/productPostView.php?pageAction=productPostShow&id=$1 [QSA,L]

RewriteRule ^productClass/([0-9]+)\.html$ view/productView.php?pageAction=productClassIndex&id=$1 [QSA,L]

RewriteRule ^enterprise/([0-9]+)/(.*)-([0-9]+)-([0-9]+)$ view/enterpriseMemberView.php?pageAction=memberShow&id=$1&actionShow=$2&showType=$3&appendId=$4 [QSA,L]
RewriteRule ^enterprise/([0-9]+)/(.*)$ view/enterpriseMemberView.php?pageAction=memberShow&id=$1&actionShow=$2 [QSA,L]
RewriteRule ^enterprise/([0-9]+)\.html$ view/enterpriseMemberView.php?pageAction=memberShow&id=$1 [QSA,L]
RewriteRule ^enterprise/([0-9]+)$ view/enterpriseMemberView.php?pageAction=memberShow&id=$1 [QSA,L]

RewriteRule ^news\.html$ view/newsView.php [QSA,L]

RewriteRule ^enterprise\.html$ view/enterpriseView.php [QSA,L]
RewriteRule ^quotedPrice\.html$ newView/searchQpView.php [QSA,L]
RewriteRule ^product\.html$ view/productView.php [QSA,L]
RewriteRule ^sell\.html$ view/module/sellView.php [QSA,L]
RewriteRule ^wantToBuy\.html$ view/module/wantToBuyView.php [QSA,L]
RewriteRule ^superMarket\.html$ view/module/superMarketView.php [QSA,L]
RewriteRule ^help\.html$ view/newsView.php?pageAction=help [QSA,L]

RewriteRule ^column/([0-9]+)\.html$ view/newsView.php?pageAction=column&id=$1 [QSA,L]

RewriteRule ^product/([0-9]+)\.html$ view/productPostView.php?pageAction=productPostShow&id=$1 [QSA,L]

RewriteRule ^enterprise/([0-9]+)/(.*)-([0-9]+)-([0-9]+).html$ view/enterpriseMemberView.php?pageAction=memberShow&id=$1&actionShow=$2&showType=$3&appendId=$4 [QSA,L]

//结果是 enterprise/32/open-12-13.html
//32是参数1,open是参数2,12是参数3,13是参数4

 

http://www.cnblogs.com/ansin/archive/2011/12/12/2285288.html

 

分享到:
评论

相关推荐

    Apache的Mode Rewrite模块和.htaccess文件配合.docx

    在Windows下,需要在Apache的安装目录下找到httpd.conf文件,并启用Mode Rewrite模块,然后在htaccess文件中添加Rewrite规则。在Mac OS X下,需要在/etc/apache2/httpd.conf文件中启用Mode Rewrite模块,然后在/...

    ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

    打开 Apache 的配置文件 `httpd.conf`,找到 `LoadModule rewrite_module modules/mod_rewrite.so` 这一行,确保其前面没有 `#` 号,表示模块已启用。 2. **允许 `.htaccess` 文件生效**: 在 `httpd.conf` 中,...

    IIS伪静态rewrite组件及httpd.ini配置文件

    httpd.ini文件是用于配置IIS Rewrite组件的主要文件,类似于Apache服务器中的.htaccess文件。虽然IIS默认使用web.config文件来存储配置信息,但在某些情况下,如在IIS Express或非IIS主进程中运行的应用程序,httpd....

    iis+httpd.ini实现伪静态

    httpd.ini文件通常被用在Apache服务器上,但在IIS中,通过安装ISAPI_Rewrite插件,也可以使用该文件进行URL重写。 ISAPI_Rewrite是一个强大的URL重写工具,它允许我们使用类似Apache .htaccess文件的规则来管理IIS...

    APACHE支持.htaccess伪静重写出错 No input file specified的解决方案

    在Apache的配置文件`httpd.conf`中,确保`mod_rewrite`模块已加载。搜索`LoadModule rewrite_module modules/mod_rewrite.so`,如果前面有`#`注释符,将其移除,这样Apache就会加载这个模块。 2. **允许`.htaccess...

    IIS虚拟机用到的Rewrite.dll组件

    总结来说,`Rewrite.dll`是IIS虚拟机中进行URL重写的重要组件,通过编辑`httpd.ini`文件,我们可以定制化地管理网站的URL结构,提升网站的性能和用户体验。正确理解和使用这一工具,对于网站的管理和维护至关重要。

    用ISAPI_Rewrite让IIS也支持如Apache下.htaccess的URL重写

    ISAPI_Rewrite是一款强大的URL重写工具,专为Microsoft IIS服务器设计,使得IIS能够支持类似于Apache服务器中.htaccess文件的URL重写功能。在Apache服务器中,.htaccess文件是用于配置服务器行为,特别是URL重写规则...

    PHPSay 2.1 IIS用伪静态httpd.ini文件

    HTTPD.INI 文件是IIS服务器的一种配置文件,类似于Apache服务器中的.htaccess文件。在这个文件中,你可以定义URL重写规则,将动态URL转换为更易于理解和友好的静态形式。对于PHPSay 2.1,这个httpd.ini文件包含了...

    laravel5.0在linux下解决.htaccess无效和去除index.php的问题

    在Linux服务器上解决`.htaccess`无效的问题,首先检查Apache服务器是否启用了`mod_rewrite`模块。这可以通过查看`/etc/httpd/conf/httpd.conf`(或相应配置文件路径)并确保以下行未被注释掉来完成: ```apacheconf...

    Discuz X1.5 htaccess和httpd.ini文件设置

    对于IIS服务器,通常需要将httpd.ini上传到论坛根目录,而.htaccess文件仅对Apache服务器有效,也需要上传到相同的目录。 7. 开启URL静态化 配置好重写规则后,需要进入论坛的后台管理界面,找到搜索引擎优化设置...

    Apache下htaccess的配置使用详解

    当我们在没有服务器管理权限的情况下,例如租用虚拟主机,无法直接修改Apache服务器的主配置文件`httpd.conf`时,`.htaccess`就成为了一种便捷的解决方案。它可以实现诸如定义自定义404错误页面等特殊需求。 使用`....

    Apache下htaccess的配置使用详解(转)

    Apache下的`.htaccess`文件是Web服务器配置中的一个强大工具,尤其在无法直接修改服务器主配置文件`httpd.conf`的情况下。`.htaccess`文件允许你在每个目录级别自定义配置,实现诸如错误页面定制、目录保护、URL...

    apache和htaccess知识总结

    - **模块管理**:Apache通过加载模块来扩展功能,如mod_rewrite用于URL重写,mod_security用于网站安全防护。可以通过`LoadModule`指令加载模块。 2. **.htaccess工作原理** - `.htaccess`文件是服务器在处理请求...

    教你如何在CI框架中使用 .htaccess 隐藏url中index.php

    你可以通过查看`httpd.conf`文件或使用`a2enmod rewrite`命令(在基于Debian的系统中)来检查和启用它。如果使用的是IIS,你需要安装ISAPI_Rewrite扩展。 2. **创建`.htaccess`文件**: 创建一个名为`.htaccess`的...

    IIS伪静态配置组件

    httpd.ini是ISAPI_Rewrite模块的配置文件,它类似于Apache服务器中的.htaccess文件。在这个文件中,我们可以定义一系列的URL重写规则。每条规则通常包含三个部分:匹配模式、重写目标和可选的条件。 1. **匹配模式*...

    Apache开启URL重写功能方法.docx

    - 您可以在`/etc/httpd`或`/etc/apache2`目录下的`httpd.conf`或`apache2.conf`文件中查找类似`LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so`或`LoadModule rewrite_module lib/apache2/modules/...

    Apache开启伪静态

    Apache 开启伪静态 Rewrite url重写规则详解 Apache 的 Rewrite 模块提供了强大的 URL 重写功能,通过在配置文件中添加规则,能够实现复杂的 URL 转换和跳转。本文将详细介绍 Apache 开启伪静态的配置和应用。 一...

    CI Nginx IIS Apache URL重写

    `.httpd.ini`文件是IIS中用于配置URL重写的地方,类似于Apache的`.htaccess`。以下是在IIS中配置URL重写的示例: ```ini RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !...

    Rewrite伪静态组件

    Rewrite是Apache服务器中的一种URL重写技术,通过使用.htaccess或者httpd.conf配置文件中的RewriteRule指令,可以实现URL的动态到静态转换。这个技术的核心在于Apache服务器的mod_rewrite模块,该模块允许开发者创建...

    htaccess实现伪静态方法.docx

    需要在Apache服务器的配置文件中加载Rewrite模块,打开Apache的配置文件httpd.conf,添加或修改以下配置项: LoadModule rewrite_module modules/mod_rewrite.so 保存后重启Apache服务器即可生效。 第二步:编写...

Global site tag (gtag.js) - Google Analytics