- 浏览: 1575955 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
From: http://www.qudong.com/soft/program/php/Apachejishu/20080317/624.html
我们知道,搜索引擎是偏爱静态页面的,因此,把诸如:http://www.jianglb.com/?p=123的页面改成http://www.jianglb.com/apaeche-rewrite.html显然有利于被搜索.
但是,如果一般的直接用http://www.jianglb.com/apaeche-rewrite.html而又不存在这地址的文件,就肯定会报错文件不存在.
这就要使用到Apache的rewrite模块,把这些URL重定向某个动态程序如index.php,当然,index.php也需要有相应的程序识别这些地址,以从数据库存取数据.
启用rewrite,要确认apache配置文件:httpd.conf中有
LoadModule rewrite_module libexec/mod_rewrite.so
网站所在的目录定义了下面的内
容:
Options Indexes FollowSymLinks
AllowOverride all
网站所在目录还必须包括一个.htaccess
内容为:
rewriteengine on
rewritebase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
如此则URL请求自动发送到index.php了
我写了个正值表达试是这样的
RewriteRule ^/*(.*?)/r_(.*?)-(.*?)-(.*?)-(.*?)-(.*?)\.html $1/$2.php?type1=$3&type2=$4&type3=$5&page=$6
伪静态格式必须为r_xxx-变量1-变量2-变量3-变量4.html
有什么正值表达式如果有一个变量就r_xxx-变量1.html
二个变量就r_xxx-变量1-变量2.html
三个变量就r_xxx-变量1-变量2-变量3.html
RewriteRule ^/*(.*?)/r_(.*?)-(.*?)-(.*?)-(.*?)-(.*?)\.html $1/$2.php?type1=$3&type2=$4&type3=$5&page=$6
伪静态格式必须为r_xxx-变量1-变量2-变量3-变量4.html
有什么正值表达式如果有一个变量就r_xxx-变量1.html
二个变量就r_xxx-变量1-变量2.html
三个变量就r_xxx-变量1-变量2-变量3.html
评论
8 楼
dagmom
2012-08-03
www.domain.com/cn/?page_id=32要重定向到www.domain.com/zh/contactus
该怎么写?
该怎么写?
7 楼
liudaoru
2008-12-10
获取查询字符串:
rewriterule ^/cate/(\d+)\.html /ql?cateId=$1&${query_string} [QSA,pt]
rewriterule ^/cate/(\d+)\.html /ql?cateId=$1&${query_string} [QSA,pt]
6 楼
liudaoru
2008-12-09
rewritecond %{query_string} ^(.*&)?file=([^&]+)(&.*)?$ [NC]
RewriteRule ^photos/watermark\.php$ /photos/data/%2? [NC,L]
5 楼
liudaoru
2008-12-09
Apache模块 mod_rewrite
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html#rewritecond
注意:查询字符串
Pattern不会按照查询字符串进行匹配。为了达到这个目的,你必须使用一个带有%{QUERY_STRING}变量的RewriteCond指令。当然,你也可以在替换字符串中创建包含查询字符串的URL:在替换字符串串中使用问号,以标明其后的部分应该被重新注入到QUERY_STRING中。而要删除一个已有的请求串,则可以用问号来终结替换字符串。为了联合新旧查询字符串,请使用[QSA]标志。
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html#rewritecond
注意:查询字符串
Pattern不会按照查询字符串进行匹配。为了达到这个目的,你必须使用一个带有%{QUERY_STRING}变量的RewriteCond指令。当然,你也可以在替换字符串中创建包含查询字符串的URL:在替换字符串串中使用问号,以标明其后的部分应该被重新注入到QUERY_STRING中。而要删除一个已有的请求串,则可以用问号来终结替换字符串。为了联合新旧查询字符串,请使用[QSA]标志。
4 楼
liudaoru
2008-12-09
3 楼
liudaoru
2008-12-08
Linux下Apache安装/增加mod_rewrite模块
From: http://tech.ddvip.com/2008-10/122477126681842.html
如果你的服务器apache还没有安装,那很简单,在编译apache时将mod_rewrite模块编译进去就可以,相关文档可以在http://man.ddvip.com/soft/apache2.2/misc/rewriteguide.html中找到。如果你的apache已经安装好了,现在只想编译出mod_rewrite.so模块,在apache中进行加载,下面我们就介绍这个方法。
以Fedora操作系统进行举例:
1)首次安装apache,在编译时增加——enable-rewrite选项。
如。/configure ——prefix=/usr/local/apachel ——enable-so ——enable-mods-shared=all ——enable-rewrite ——enable-cache
2)增加mod_rewrite模块
# find . -name mod_rewrite.c //在apache的源码安装目录中寻找mod_rewrite.c文件
# cd PATH/to/mod_rewrite.c //进入包含mod_rewrite.c文件的目录
# /usr/local/apache/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你当前正在使用apache的bin目录里
# /usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果没有什么错误的话,应该在你的apache的modules目录中编译出一个mod_rewrite.so文件。
编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了。
vicos注:完成之后,记得重启服务器apache.
From: http://tech.ddvip.com/2008-10/122477126681842.html
如果你的服务器apache还没有安装,那很简单,在编译apache时将mod_rewrite模块编译进去就可以,相关文档可以在http://man.ddvip.com/soft/apache2.2/misc/rewriteguide.html中找到。如果你的apache已经安装好了,现在只想编译出mod_rewrite.so模块,在apache中进行加载,下面我们就介绍这个方法。
以Fedora操作系统进行举例:
1)首次安装apache,在编译时增加——enable-rewrite选项。
如。/configure ——prefix=/usr/local/apachel ——enable-so ——enable-mods-shared=all ——enable-rewrite ——enable-cache
2)增加mod_rewrite模块
# find . -name mod_rewrite.c //在apache的源码安装目录中寻找mod_rewrite.c文件
# cd PATH/to/mod_rewrite.c //进入包含mod_rewrite.c文件的目录
# /usr/local/apache/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你当前正在使用apache的bin目录里
# /usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果没有什么错误的话,应该在你的apache的modules目录中编译出一个mod_rewrite.so文件。
编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了。
vicos注:完成之后,记得重启服务器apache.
2 楼
liudaoru
2008-12-08
Apache的Mod_rewrite学习(一)
From: http://hedong.3322.org/archives/000342.html
车东很早就写了一篇文章来介绍利用mod_rewrite模块来达到用静态页面形式的链接隐藏后台的动态页面。
Apache的rewrite模块,提供了一个基于规则的重写(rewrite,也许译为重构更为合适)引擎,来实时重写发送到Apache的请求URL。因功能极其强大,被称为URL重写的“瑞士军刀”。
这个模块使用一个基于正则表达式解析器开发的重写引擎,根据web管理员定义的规则来实时(on the fly)重写请求URL。它支持任意数目的重写规则,以及附加到一条规则上的任意数目的规则条件,从而提供了一套非常灵活和功能强大的URL处理机制。URL处理操作的实施与否,依赖于各种各样的条件检查,如检查服务器变量、环境变量、HTTP头字段、时间戳的值,甚至外部数据库的检索结果。这个模块可以在服务器范围内(http.conf)、目录范围内(.htaccess)或请求串(query-string)的一部分处理有关的URL。重写的结果URL,可以指向一个站内的处理程序、指向站外的重定向或者一个站内的代理。与灵活和功能强大相随的是设置的复杂,别指望一天内弄明白整个模块。(所以,这个学习笔记也分了几部分:)
内部处理过程
API阶段
首先,Apache处理HTTP请求是分阶段进行的,Apache API为每个阶段提供了一个钩子(hook)。Mod_rewrite使用了其中的两个钩子:一个用来在HTTP请求被读取但还没有访问授权验证之前进行URL_to_filename转换,一个用来在授权验证完成且目录设置文件(.htaccess)读取之后、但内容处理器(content handler)被调用之前激化,进行修补(fixup).因此,当一个请求到达,Apache决定了相关的服务器(或虚拟服务器)以后进行URL_to_filename阶段,重写引擎(rewrite engine)开始处理服务器设置中的重写指令(mod_rewrite directives).接下来几个阶段过后进入修补阶段,此时最终的数据所在的物理目录已经找到,目录配置中的重写指令开始执行。在这两个阶段,mod_rewrite都是将URL重写为新的URL或文件名,所以看起来并没有明显的区别。对API的这种应用,并不是一开始就是这样设计的,而是Apache1.x不得已而为之。为了搞清这个问题,以下两点需要记住。
1)虽然mod_rewrite能进行URL到URL、URL到文件名字甚至文件名字到文件名字的转换,API(1.x)目前提供了一个URL_to_filename转换。在Apache2.0中,这两个钩子会被加进去,整个过程会更加清晰。一个事实必须清楚的记得:Apache在URL_to_filename钩子中,做得比API设计的功能更多。
2)不可思议的是,mod_rewrite能在目录范围内(如根据.htaccess文件的指令配置)进行URL处理,虽然URL很早就已经被转换为文件名字了。只所以会如此,是因为.htaccess文件存在于文件系统中。也就是说,在这个阶段来进行URL处理,是非常晚的时候了。为了解决这个"先有鸡还是先有蛋"的问题,mod_rewrite用了一个小技巧:当在目录范围内处理URL/filename时,mod_rewrite先将文件名逆转回相关的URL(虽然通常是不可能的,但请参见下面用以实现这个技巧的RewriteBase指令),然后据这个新URL生成一个站内的子请求(internal sub-request),这又重开始了API进程。Mod_rewrite尽量使这些复杂的步骤对用户透明,但应要记住:虽然目录范围URL的真正处理过程很快很高效,但这一阶段会因为这个"鸡和蛋"的问题而变得很慢和低效。从另一方面来看,这也是mod_rewrite提供给普通用户进行目录范围内的URL处理的唯一途径.
规则集(RewriteRule指令集合)处理过程
当mod_rewrite在上述的两个API阶段被激活时,它会从它的配置数据结构(在开始服务器上下文(per-server context)或目录上下文(per-directory context)时创建的)中读取配置的规则集,然后URL重写引擎启动来执行包含的规则集(一个或多条规则以及它们的条件)。两种上下文中的处理过程都是一样的,差别只是在最后的结果处理过程上。
规则集中规则的顺序是非常重要的,因为重写引擎以特定的顺序来处理它们。重写引擎顺序遍历规则集,当一条规则匹配时,引擎会去遍历与它相关的条件集(RewriteCond指令集合).由于历史的原因,条件集先被列出来,因此控制流流程有点曲折(long-winded).如图一所示:
正如所看到的,首先URL会与每条规则的模板(pattern)比较,当匹配失败时,立即停止对当前规则的处理进入下一条规则。当匹配成功时,mod_rewrite寻找相关的规则条件。如果找不到相关的条件,则直接执行规则中定义的替换,然后回到规则遍历的过程。如果找到了相关的条件,则启动一个内部循环,依次检查各个条件。对于检查,我们不是拿一个模板来匹配当前的URL,而是先创建一个TestString串,将串内的变量、后向引用(bakc-reference)、查询结果(map lookups)等展开,然后用这个TestString和条件式中的CondPattern进行匹配,如果匹配失败,则整个条件集且这个规则都不再执行,重要回到规则遍历中;如果匹配成功,则检查下一个条件,如果所有的条件都满足,则执行规则中定义的替换动作。
特殊字符的转义
既然基于正则式,则当然会有特殊字符的问题。在1.3.20版本的Apache中,通过在特殊字符前加一个“\”来将TestString或Sustitution串的特殊字符转义。
正则式的后向引用
有一点需要记住:一旦在模板(pattern)或条件模板(CondPattern)中使用了括号,则后向引用已经自动产生了,你可以在Sustitution或TestString中通过$N或%N来引用相关的值。如图,描述了后向引用的值可以传到的位置。
配置指令(Configuration Directives)
指令 语法 默认值 说明 备注
RewriteEngine RewriteEngine on|off Off 开关重构引擎 默认时不能继承,故每个虚拟主机都要有自己的开关指令。
RewriteOptions RewriteOptions Option MaxRedirects=10 设置一些特殊参数 inherit:配置是否继承,MaxRedirects=number:内部重定向次数
RewriteLog RewriteLog file-path None 设定重写log文件 用RewriteLogLevel 0来禁止日志
RewriteLogLevel RewriteLogLevel Level RewriteLogLevel 0 设置日志级别 0表示没有,2以上用于debug,9及以上表示全部信息
RewriteLock RewriteLock file-path None 设置RewriteMap程序的同步锁文件 要求是本地文件,此文件只对rewriting map-program有效。
RewriteMap RewriteMap MapName MapType:MapSource Notused per default 定义重写影射 具体说明参见文档
RewriteBase RewriteBase URL-path physical directory path 设置目录范围内重写的基本URL 具体说明参见文档
RewriteCond RewriteCond TestString CondPattern None 定义规则条件 具体说明参见文档
RewriteRule RewriteRule Pattern Substitution None 定义重写规则 具体说明参见文档
参考资料:
http://httpd.apache.org/docs/mod/mod_rewrite.html
From: http://hedong.3322.org/archives/000342.html
车东很早就写了一篇文章来介绍利用mod_rewrite模块来达到用静态页面形式的链接隐藏后台的动态页面。
Apache的rewrite模块,提供了一个基于规则的重写(rewrite,也许译为重构更为合适)引擎,来实时重写发送到Apache的请求URL。因功能极其强大,被称为URL重写的“瑞士军刀”。
这个模块使用一个基于正则表达式解析器开发的重写引擎,根据web管理员定义的规则来实时(on the fly)重写请求URL。它支持任意数目的重写规则,以及附加到一条规则上的任意数目的规则条件,从而提供了一套非常灵活和功能强大的URL处理机制。URL处理操作的实施与否,依赖于各种各样的条件检查,如检查服务器变量、环境变量、HTTP头字段、时间戳的值,甚至外部数据库的检索结果。这个模块可以在服务器范围内(http.conf)、目录范围内(.htaccess)或请求串(query-string)的一部分处理有关的URL。重写的结果URL,可以指向一个站内的处理程序、指向站外的重定向或者一个站内的代理。与灵活和功能强大相随的是设置的复杂,别指望一天内弄明白整个模块。(所以,这个学习笔记也分了几部分:)
内部处理过程
API阶段
首先,Apache处理HTTP请求是分阶段进行的,Apache API为每个阶段提供了一个钩子(hook)。Mod_rewrite使用了其中的两个钩子:一个用来在HTTP请求被读取但还没有访问授权验证之前进行URL_to_filename转换,一个用来在授权验证完成且目录设置文件(.htaccess)读取之后、但内容处理器(content handler)被调用之前激化,进行修补(fixup).因此,当一个请求到达,Apache决定了相关的服务器(或虚拟服务器)以后进行URL_to_filename阶段,重写引擎(rewrite engine)开始处理服务器设置中的重写指令(mod_rewrite directives).接下来几个阶段过后进入修补阶段,此时最终的数据所在的物理目录已经找到,目录配置中的重写指令开始执行。在这两个阶段,mod_rewrite都是将URL重写为新的URL或文件名,所以看起来并没有明显的区别。对API的这种应用,并不是一开始就是这样设计的,而是Apache1.x不得已而为之。为了搞清这个问题,以下两点需要记住。
1)虽然mod_rewrite能进行URL到URL、URL到文件名字甚至文件名字到文件名字的转换,API(1.x)目前提供了一个URL_to_filename转换。在Apache2.0中,这两个钩子会被加进去,整个过程会更加清晰。一个事实必须清楚的记得:Apache在URL_to_filename钩子中,做得比API设计的功能更多。
2)不可思议的是,mod_rewrite能在目录范围内(如根据.htaccess文件的指令配置)进行URL处理,虽然URL很早就已经被转换为文件名字了。只所以会如此,是因为.htaccess文件存在于文件系统中。也就是说,在这个阶段来进行URL处理,是非常晚的时候了。为了解决这个"先有鸡还是先有蛋"的问题,mod_rewrite用了一个小技巧:当在目录范围内处理URL/filename时,mod_rewrite先将文件名逆转回相关的URL(虽然通常是不可能的,但请参见下面用以实现这个技巧的RewriteBase指令),然后据这个新URL生成一个站内的子请求(internal sub-request),这又重开始了API进程。Mod_rewrite尽量使这些复杂的步骤对用户透明,但应要记住:虽然目录范围URL的真正处理过程很快很高效,但这一阶段会因为这个"鸡和蛋"的问题而变得很慢和低效。从另一方面来看,这也是mod_rewrite提供给普通用户进行目录范围内的URL处理的唯一途径.
规则集(RewriteRule指令集合)处理过程
当mod_rewrite在上述的两个API阶段被激活时,它会从它的配置数据结构(在开始服务器上下文(per-server context)或目录上下文(per-directory context)时创建的)中读取配置的规则集,然后URL重写引擎启动来执行包含的规则集(一个或多条规则以及它们的条件)。两种上下文中的处理过程都是一样的,差别只是在最后的结果处理过程上。
规则集中规则的顺序是非常重要的,因为重写引擎以特定的顺序来处理它们。重写引擎顺序遍历规则集,当一条规则匹配时,引擎会去遍历与它相关的条件集(RewriteCond指令集合).由于历史的原因,条件集先被列出来,因此控制流流程有点曲折(long-winded).如图一所示:
正如所看到的,首先URL会与每条规则的模板(pattern)比较,当匹配失败时,立即停止对当前规则的处理进入下一条规则。当匹配成功时,mod_rewrite寻找相关的规则条件。如果找不到相关的条件,则直接执行规则中定义的替换,然后回到规则遍历的过程。如果找到了相关的条件,则启动一个内部循环,依次检查各个条件。对于检查,我们不是拿一个模板来匹配当前的URL,而是先创建一个TestString串,将串内的变量、后向引用(bakc-reference)、查询结果(map lookups)等展开,然后用这个TestString和条件式中的CondPattern进行匹配,如果匹配失败,则整个条件集且这个规则都不再执行,重要回到规则遍历中;如果匹配成功,则检查下一个条件,如果所有的条件都满足,则执行规则中定义的替换动作。
特殊字符的转义
既然基于正则式,则当然会有特殊字符的问题。在1.3.20版本的Apache中,通过在特殊字符前加一个“\”来将TestString或Sustitution串的特殊字符转义。
正则式的后向引用
有一点需要记住:一旦在模板(pattern)或条件模板(CondPattern)中使用了括号,则后向引用已经自动产生了,你可以在Sustitution或TestString中通过$N或%N来引用相关的值。如图,描述了后向引用的值可以传到的位置。
配置指令(Configuration Directives)
指令 语法 默认值 说明 备注
RewriteEngine RewriteEngine on|off Off 开关重构引擎 默认时不能继承,故每个虚拟主机都要有自己的开关指令。
RewriteOptions RewriteOptions Option MaxRedirects=10 设置一些特殊参数 inherit:配置是否继承,MaxRedirects=number:内部重定向次数
RewriteLog RewriteLog file-path None 设定重写log文件 用RewriteLogLevel 0来禁止日志
RewriteLogLevel RewriteLogLevel Level RewriteLogLevel 0 设置日志级别 0表示没有,2以上用于debug,9及以上表示全部信息
RewriteLock RewriteLock file-path None 设置RewriteMap程序的同步锁文件 要求是本地文件,此文件只对rewriting map-program有效。
RewriteMap RewriteMap MapName MapType:MapSource Notused per default 定义重写影射 具体说明参见文档
RewriteBase RewriteBase URL-path physical directory path 设置目录范围内重写的基本URL 具体说明参见文档
RewriteCond RewriteCond TestString CondPattern None 定义规则条件 具体说明参见文档
RewriteRule RewriteRule Pattern Substitution None 定义重写规则 具体说明参见文档
参考资料:
http://httpd.apache.org/docs/mod/mod_rewrite.html
1 楼
liudaoru
2008-12-08
Apache 重写规则的常见应用 (rewrite)
From: http://www.eygle.com/digest/2005/09/apache_oeoeooaeuooa_rewrite.html
本文出自:http://www.linuxforum.net 作者:吴阿亭 Jephe wu (2001-09-05 08:00:00)
一:目的
本文旨在提供如何用Apache重写规则来解决一些常见的URL重写方法的问题,通过常见的
实例给用户一些使用重写规则的基本方法和线索。
二:为什么需要用重写规则?
一个网站,如果是长期需要放在internet上提供服务,必定会有不断地更新和维护,如临
时转移到其它服务器进行维护,重新组织目录结构,变换URL甚至改变到新的域名等等,
而为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写
规则)。
三: 重写规则的作用范围
1) 可以使用在Apache主配置文件httpd.conf中
2) 可以使用在httpd.conf里定义的虚拟主机配置中
3) 可以使用在基本目录的跨越配置文件.htaccess中
四:重写规则的应用条件
只有当用户的WEB请求最终被导向到某台WEB服务器的Apache后台,则这台WEB服务器接受
进来的请求,根据配置文件该请求是主配置还是虚拟主机,再根据用户在浏览器中请求的
URI来配对重写规则并且根据实际的请求路径配对.htaccess中的重写规则。最后把请求
的内容传回给用户,该响应可能有两种:
1) 对浏览器请求内容的外部重定向(Redirect)到另一个URL。
让浏览器再次以新的URI发出请求(R=301或者R=302,临时的或是永久的重定向)
如:一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换
成了新的域名
则把旧的域名重定向到新的域名(Redirect)
2) 也可能是由Apache内部子请求代理产生新的内容送回给客户[P,L]
这是Apache内部根据重写后的URI内部通过代理模块请求内容并送回内容给客户,而客户
端浏览器并
不知道,浏览器中的URI不会被重写。但实际内容被Apache根据重写规则后的URI得到。
如:在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的WEB服务
器的请求。
五:重写规则怎样工作?
我们假定在编译Apache时已经把mod_rewrite编译成模块,确信你的httpd.conf中有
LoadModule rewrite_module libexec/mod_rewrite.so
并且在Addmodule中有
Addmodule mod_rewrite.c
则可以使用重写规则。
当外部请求来到Apache,Apache调用重写规则中的定义来重写由用户浏览器指定请求的
URI,最后被重写的URI如果是重定向,则送由浏览器作再一次请求;如果是代理则把重写
后的URI交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。
六: 何时使用.htaccess中的重写规则定义?
假如你对你的的网站内容所在的服务器没有管理员权限,或者你的网站放在ISP的服务器
上托管等等条件下,你无法改写主配置文件,然而你可以对你的WEB站点内容所在的目录
有写权限,则你可以设置自己的.htaccess
文件达到同样的目的。但你需要确定主配置文件中对你的网站所在的目录定义了下面的内
容:
Options Indexes FollowSymLinks
AllowOverride all
否则你的.htaccess不会工作。
七: 应用举例
假定Apache被编译安装在主机192.168.1.56的/usr/local/apache/ 目录下面,我们编
译进了重写和代理模块。
1) 隐藏Apache下的某个目录,使得对该目录的任何请求都重定向到另一个文件。
a> httpd.conf的实现方法
我们放下面的部分到/usr/local/apache/conf/httpd.conf
options Indexes followsymlinks
allowoverride all
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]
注:rewriteengine on 为重写引擎开关,如果设为off,则任何重写规则定义将不被应
用,该开关的另一好处就是如果为了临时拿掉重写规则,则改为off再重启动Apache即
可,不必将下面一条条的重写规则注释掉。
rewritebase / 的作用是如果在下面的rewriterule定义中被重写后的部分(此处为文件
名index.html.en)前面没有/,则是相对目录,相对于这个rewritebase后面的定义也就
是/usr/local/apache/htdocs/index.html.en,否则,如果此处没有rewritebase /这
一项,则被重写成
http://192.168.1.56/usr/local/apache/htdocs/manual/index.html.en ,显然是
不正确的。
不过这里我们也可以不用rewritebase / , 而改为
rewriteengine on
rewriterule ^(.*)$ /index.html.en [R=301]
或者
rewriteengine on
rewriterule ^(.*)$ http://192.168.1.56/index.html.en [R=301]
b> .htaccess的实现方法
我们先放下面的部分到httpd.conf
options Indexes followsymlinks
allowoverride all
然后放下面的部分到/usr/local/apache/htdocs/manual/.htaccess中
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]
注:对文件.htaccess所作的任何改动不需要重启动Apache.
问:要是把这个manual目录重定向到用户jephe的自己的主目录呢?
用下面的.htaccess方案。
rewriteengine on
rewritebase /~jephe/
rewriterule ^(.*)$ $1 [R=301]
则对manual目录下任何文件的请求被重定向到~jephe目录下相同文件的请求。
2) 转换www.username.domain.com的对于username的主页请求为
www.domain.com/username
对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写
http://www.username.domain.com/anypath 到 /home/username/anypath
Rewriteengine on
rewritecond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
rewriterule ^(.+) %{HTTP_HOST}$1 [C]
rewriterule ^www\.([^.]+)\.host\.com(.*) /home/$1$2
注:
rewritecond 条件重写规则,当满足后面定义的条件后才会应用下面的重写规则,
rewritecond有各种变量
,请查阅相关文档。
3) 防火墙上的重写规则代理内部网段上服务器的请求。
NameVirtualhost 1.2.3.4
servername www.domain.com
rewriteengine on
proxyrequest on
rewriterule ^/(.*)$ http://192.168.1.3/$1 [P,L]
注:当外部浏览器请求www.domain.com时被解析到IP地址1.2.3.4 ,Apache 交出
mod_rewrite处理转换成
http://192.168.1.3/$1后再交由代理模块mod_proxy得到内容后传送回用户的浏览器。
4) 基本预先设定的转换MAP表进行重写 rewritemap
转换www.domain.com/{countrycode}/anypath 到Map表中规定的URI,上面是虚拟主机
中的定义
rewritelog /usr/local/apache/logs/rewrite.log
rewriteloglevel 9
rewriteengine on
proxyrequest on
rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map
rewriterule ^/([^/]+)+/(.*)$ http://%{REMOTE_HOST}::$1 [C]
rewriterule (.*)::([a-z]+)$ ${sitemap:$2|http://h.i.j.k/} [R=301,L]
文件/usr/local/apache/conf/rewrite.map的内容如下:
sg http://a.b.c.d/
sh http://e.f.g.h/
注: 当用户请求http://www.domain.com/sg/anypath时被重写为
http://a.b.c.d/anypath .
当需要调试时请用rewritelog and rewriteloglevel 9联合,9为最大即得到最多的调试
信息
最小为1,最小的调试信息,默认为0,没有调试信息。
sitemap的语法是${sitemap: LookupKey | Defaultvalue} ,有些书上把$写成了%是错
误的。
From: http://www.eygle.com/digest/2005/09/apache_oeoeooaeuooa_rewrite.html
本文出自:http://www.linuxforum.net 作者:吴阿亭 Jephe wu (2001-09-05 08:00:00)
一:目的
本文旨在提供如何用Apache重写规则来解决一些常见的URL重写方法的问题,通过常见的
实例给用户一些使用重写规则的基本方法和线索。
二:为什么需要用重写规则?
一个网站,如果是长期需要放在internet上提供服务,必定会有不断地更新和维护,如临
时转移到其它服务器进行维护,重新组织目录结构,变换URL甚至改变到新的域名等等,
而为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写
规则)。
三: 重写规则的作用范围
1) 可以使用在Apache主配置文件httpd.conf中
2) 可以使用在httpd.conf里定义的虚拟主机配置中
3) 可以使用在基本目录的跨越配置文件.htaccess中
四:重写规则的应用条件
只有当用户的WEB请求最终被导向到某台WEB服务器的Apache后台,则这台WEB服务器接受
进来的请求,根据配置文件该请求是主配置还是虚拟主机,再根据用户在浏览器中请求的
URI来配对重写规则并且根据实际的请求路径配对.htaccess中的重写规则。最后把请求
的内容传回给用户,该响应可能有两种:
1) 对浏览器请求内容的外部重定向(Redirect)到另一个URL。
让浏览器再次以新的URI发出请求(R=301或者R=302,临时的或是永久的重定向)
如:一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换
成了新的域名
则把旧的域名重定向到新的域名(Redirect)
2) 也可能是由Apache内部子请求代理产生新的内容送回给客户[P,L]
这是Apache内部根据重写后的URI内部通过代理模块请求内容并送回内容给客户,而客户
端浏览器并
不知道,浏览器中的URI不会被重写。但实际内容被Apache根据重写规则后的URI得到。
如:在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的WEB服务
器的请求。
五:重写规则怎样工作?
我们假定在编译Apache时已经把mod_rewrite编译成模块,确信你的httpd.conf中有
LoadModule rewrite_module libexec/mod_rewrite.so
并且在Addmodule中有
Addmodule mod_rewrite.c
则可以使用重写规则。
当外部请求来到Apache,Apache调用重写规则中的定义来重写由用户浏览器指定请求的
URI,最后被重写的URI如果是重定向,则送由浏览器作再一次请求;如果是代理则把重写
后的URI交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。
六: 何时使用.htaccess中的重写规则定义?
假如你对你的的网站内容所在的服务器没有管理员权限,或者你的网站放在ISP的服务器
上托管等等条件下,你无法改写主配置文件,然而你可以对你的WEB站点内容所在的目录
有写权限,则你可以设置自己的.htaccess
文件达到同样的目的。但你需要确定主配置文件中对你的网站所在的目录定义了下面的内
容:
Options Indexes FollowSymLinks
AllowOverride all
否则你的.htaccess不会工作。
七: 应用举例
假定Apache被编译安装在主机192.168.1.56的/usr/local/apache/ 目录下面,我们编
译进了重写和代理模块。
1) 隐藏Apache下的某个目录,使得对该目录的任何请求都重定向到另一个文件。
a> httpd.conf的实现方法
我们放下面的部分到/usr/local/apache/conf/httpd.conf
options Indexes followsymlinks
allowoverride all
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]
注:rewriteengine on 为重写引擎开关,如果设为off,则任何重写规则定义将不被应
用,该开关的另一好处就是如果为了临时拿掉重写规则,则改为off再重启动Apache即
可,不必将下面一条条的重写规则注释掉。
rewritebase / 的作用是如果在下面的rewriterule定义中被重写后的部分(此处为文件
名index.html.en)前面没有/,则是相对目录,相对于这个rewritebase后面的定义也就
是/usr/local/apache/htdocs/index.html.en,否则,如果此处没有rewritebase /这
一项,则被重写成
http://192.168.1.56/usr/local/apache/htdocs/manual/index.html.en ,显然是
不正确的。
不过这里我们也可以不用rewritebase / , 而改为
rewriteengine on
rewriterule ^(.*)$ /index.html.en [R=301]
或者
rewriteengine on
rewriterule ^(.*)$ http://192.168.1.56/index.html.en [R=301]
b> .htaccess的实现方法
我们先放下面的部分到httpd.conf
options Indexes followsymlinks
allowoverride all
然后放下面的部分到/usr/local/apache/htdocs/manual/.htaccess中
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]
注:对文件.htaccess所作的任何改动不需要重启动Apache.
问:要是把这个manual目录重定向到用户jephe的自己的主目录呢?
用下面的.htaccess方案。
rewriteengine on
rewritebase /~jephe/
rewriterule ^(.*)$ $1 [R=301]
则对manual目录下任何文件的请求被重定向到~jephe目录下相同文件的请求。
2) 转换www.username.domain.com的对于username的主页请求为
www.domain.com/username
对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写
http://www.username.domain.com/anypath 到 /home/username/anypath
Rewriteengine on
rewritecond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
rewriterule ^(.+) %{HTTP_HOST}$1 [C]
rewriterule ^www\.([^.]+)\.host\.com(.*) /home/$1$2
注:
rewritecond 条件重写规则,当满足后面定义的条件后才会应用下面的重写规则,
rewritecond有各种变量
,请查阅相关文档。
3) 防火墙上的重写规则代理内部网段上服务器的请求。
NameVirtualhost 1.2.3.4
servername www.domain.com
rewriteengine on
proxyrequest on
rewriterule ^/(.*)$ http://192.168.1.3/$1 [P,L]
注:当外部浏览器请求www.domain.com时被解析到IP地址1.2.3.4 ,Apache 交出
mod_rewrite处理转换成
http://192.168.1.3/$1后再交由代理模块mod_proxy得到内容后传送回用户的浏览器。
4) 基本预先设定的转换MAP表进行重写 rewritemap
转换www.domain.com/{countrycode}/anypath 到Map表中规定的URI,上面是虚拟主机
中的定义
rewritelog /usr/local/apache/logs/rewrite.log
rewriteloglevel 9
rewriteengine on
proxyrequest on
rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map
rewriterule ^/([^/]+)+/(.*)$ http://%{REMOTE_HOST}::$1 [C]
rewriterule (.*)::([a-z]+)$ ${sitemap:$2|http://h.i.j.k/} [R=301,L]
文件/usr/local/apache/conf/rewrite.map的内容如下:
sg http://a.b.c.d/
sh http://e.f.g.h/
注: 当用户请求http://www.domain.com/sg/anypath时被重写为
http://a.b.c.d/anypath .
当需要调试时请用rewritelog and rewriteloglevel 9联合,9为最大即得到最多的调试
信息
最小为1,最小的调试信息,默认为0,没有调试信息。
sitemap的语法是${sitemap: LookupKey | Defaultvalue} ,有些书上把$写成了%是错
误的。
发表评论
-
Apache相关知识整理
2010-06-22 14:04 1145Apache反向代理: ProxyRequests Of ... -
apache ab压力测试
2010-03-04 10:36 5720From: http://blog.chinaunix.net ... -
借助于referer来实现防盗链功能
2009-07-06 12:40 2434From:http://home.phpchina.com/s ... -
Apache配置详解(最好的APACHE配置教程)
2009-02-21 11:32 220561From: http://aiks.blog.com.cn/ ... -
类似于LoadRunner的压力测试功能
2008-12-19 16:59 1615http://jakarta.apache.org/jmete ... -
apxs - Apache 扩展工具
2008-11-17 17:34 3211From: http://lamp.linux.gov.cn/ ... -
应用服务器-Resin服务器平台介绍
2008-10-09 14:15 2028From: http://java.ccidnet.com/ ... -
处理tomcat中文乱码问题[z]
2008-06-05 15:22 2057在JSP/Servlet 中主要有以下几个地方可以设置编码,p ... -
Google大表(Bigtable):结构化数据的分布存储系统[z]
2008-03-31 17:44 4072九月 26, 2006翻译:Google大表(BigTable ... -
Tomcat5+ 传递参数时乱码问题的解决办法
2008-01-10 13:29 1173在 %TOMCAT_HOME%/conf/web.xml中,找 ... -
纽约时报:谷歌打破游戏规则挑战微软霸主地位[z]
2007-12-18 23:11 2029From: http://tech.qq.com/a/2007 ... -
A first hand look at building an Android application
2007-11-18 21:45 1396A first hand look at building a ... -
Apache配置技巧[z]
2007-10-18 21:45 1532Apache Apache软件包的组成 Apache服务器的启 ... -
SOA面向服务架构的原则[z]
2007-10-05 23:16 1368众多企业都已经创建各种实验性Web Services 项目,事 ... -
ORA-00018:超出最大会话数[z]
2007-10-04 20:03 5307来自:blog.csdn.net/meanson/archiv ... -
squid配置简介[z]
2007-09-13 16:52 3376一、Squid入门 二、编译 ...
相关推荐
要使用ISAPI_Rewrite生成伪静态网页,首先需要从官方网站下载并安装ISAPI_Rewrite。安装完成后,打开IIS管理器,找到对应的网站,右键选择“属性”,在ISAPI筛选器中添加ISAPI_Rewrite的dll文件路径。接下来,我们...
网站伪静态是指将原本动态生成的页面以静态HTML文件的形式展现给用户和搜索引擎。虽然实际内容仍然是动态生成的,但对外显示的URL不再包含如"?id=123"这样的动态参数,而是像"example.html"这样看似静态的格式。这样...
伪静态页面生成技术是网站优化的重要手段,它结合了动态网页的灵活性和静态网页的优势,有助于提升SEO排名和用户体验。通过URL重写、服务器端转换或前端路由等方式,我们可以轻松实现伪静态效果。在实际应用中,合理...
要在Apache中启用伪静态,首先需要确保`mod_rewrite`模块已加载,然后在相应配置文件(如`.htaccess`)中添加规则。下面是一个简单的伪静态配置示例,用于处理常见的WordPress permalinks: ```apacheconf ...
ISAPI_Rewrite,ISAPI_Rewrite用来实现伪静态,将动态网页通过重写URL的方法实现去掉动态网页的参数!它的行为是像Apache的mod_Rewrite ,但专为微软的Internet信息服务( IIS )。 IIS配置相当简单,配置好之后就有...
这种转换并不会实际生成静态HTML文件,而是让服务器在接收到请求时,根据重写规则将请求重定向到相应的动态页面处理程序上。 #### 二、Apache伪静态配置步骤 1. **启用Mod_rewrite模块** 首先,确保Apache服务器...
3. **使用PHP输出控制函数缓存机制生成静态页面**:利用PHP的输出缓冲机制来缓存动态生成的内容,并将其输出为静态HTML页面。 4. **使用NoSQL从内存中读取内容**:虽然这种方法本质上属于缓存技术,但在某些场景下也...
Rewrite伪静态组件广泛应用于博客系统、电商网站、CMS内容管理系统等,比如WordPress、Magento、Drupal等都支持使用Rewrite进行URL美化。此外,还可以通过Rewrite规则实现URL的重定向,解决旧链接的迁移问题,或者...
1. 伪静态技术:伪静态是将动态页面以静态HTML的形式展示给用户,但实际上仍然是动态生成的页面。这样做可以提升搜索引擎的友好度,使网页更容易被爬虫抓取,同时也能降低服务器压力,提高网站访问速度。 2. mod_...
2. **伪静态(Pseudo Static)**:伪静态技术是将动态网页的URL转换成类似静态页面的URL,但实际页面仍然是动态生成的。这种方式可以模拟静态页面的效果,对用户和搜索引擎来说,看起来就像是访问了真实的静态页面,...
ASP伪静态化、ASP静态化、ASPURL重写、IIS Rewrite和RewriteRule是Web开发中的关键概念,尤其在优化网站性能、提高搜索引擎友好度以及改善用户体验方面扮演着重要角色。下面将详细阐述这些概念及其相关技术。 1. ...
伪静态,又称为URL重写,是一种技术手段,它通过服务器配置或特定的编程技术(如Apache的 mod_rewrite),将动态URL转换为类似静态URL的形式,而实际上这些页面仍然是由服务器动态生成的。这种技术的好处在于,它既...
伪静态技术,顾名思义,是将实际为动态生成的网页以静态页面的形式展示给用户和搜索引擎。动态网页往往包含参数,如问号(?)、等号(=)等,而静态URL则更为简洁,易于理解。通过伪静态,我们可以让动态网址看起来...
在IT行业中,伪静态技术是一种常见的优化网页SEO(搜索引擎优化)的方法,它通过将动态URL转化为看似静态的URL,以提高网站的可读性、用户体验和搜索引擎的友好性。在这个场景下,"伪静态分页解决路径问题"指的是在...
其目的是使得动态生成的网页地址看起来像静态网页地址,减少URL中的参数信息,提高用户体验和搜索引擎的友好度。 接下来,介绍设置伪静态的两种主要情况,一是如果服务器支持.htaccess文件,二是针对Apache服务器的...
Apache 伪静态是一种技术,它允许动态网页的内容通过特定规则被转化为看似静态的网页地址,以提高用户体验和搜索引擎优化(SEO)。伪静态的主要优势在于,静态URL更容易被搜索引擎理解和索引,同时也使得网址看起来...
**Rewrite 页面静态化组件详解** Rewrite 是一种在 Web 服务器中实现 URL 重写的技术,常用于网站优化和动态网站的伪静态处理。它允许我们通过自定义规则来改变用户请求的实际处理方式,而不会改变URL在浏览器中的...
伪静态生成是一种技术手段,主要用于将动态网页的URL转换为静态化的、看起来像静态页面的URL,以提高网站的搜索引擎优化(SEO)效果和用户体验。动态网页在服务器端执行,而伪静态则使得用户在浏览器地址栏看到的是...
伪静态,顾名思义,是指在不改变网站实际动态生成页面的情况下,通过一定的技术手段让网页URL呈现出静态化的外观。静态页面在SEO中通常被认为更友好,因为它提供了固定且易于理解的URL结构,利于搜索引擎抓取和索引...