APACHE RewriteRule

合集下载

rewriterule

rewriterule
</IfModule>
四 要实现asp帖子URL到php帖子的映射,在 第三步的<IfModule mod_rewrite.c>和</IfModule>之间添加:
RewriteMap tolowercase int:tolower
RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)=d+ [NC]
$nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//这句是去掉尾部的.html或.htm
$vars = explode("/",$nav);
for($i=0;$i<Count($vars);$i+=2){
$_GET["$vars[$i]"]=$vars[$i+1];
第二种方法:
1,首先检查是否已安装rewrite模块:
cat httpd.conf | grep rewrite
LoadModule rewrite_module modules/mod_rewrite.so
2,生成伪静态html连接:
(1)生成伪静态html
在<VirtualHost>段最后加入
更好的做法:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?upkiller\.com/.*$ [NC]
RewriteRule \.(mp3|rar|jpe|gif)$ /warning.jpg [R=301,L]

Apache ReWriteRule参数

Apache ReWriteRule参数
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下,特殊字符(如'%', '$', ';'等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,如:
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
* 'qsappend|QSA' (追加请求串 query string append)
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
* 'noescape|NE' (在输出中不对URI作转义 no URI escaping)
注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对URL加上 http://thishost[:thisport]/的前缀,重写操作仍然会继续。 通常,你会希望停止重写操作而立即重定向,则还需要使用'L'标记.
可以使'/foo/zed'转向到一个安全的请求'/bar?arg=P1=zed'.
* 'passthrough|PT' (移交给下一个处理器 pass through)
此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是一个小修改,使之能对来自其他URI到文件名翻译器的 Alias,ScriptAlias, Redirect 等指令的输出进行后续处理。举一个能说明其含义的例子: 如果要通过mod_rewrite的重写引擎重写/abc为/def, 然后通过mod_alias使/def转变为/ghi,可以这样:

apache伪静态通用规则

apache伪静态通用规则

apache伪静态通用规则Apache伪静态通用规则指的是在使用Apache服务器时,通过.htaccess文件来实现URL的伪静态化。

通过将动态URL转化为静态URL的形式,可以提高网站的SEO友好度,增加引擎对网站的收录和排名。

下面是一些常用的Apache伪静态规则:1.删除文件扩展名RewriteRule ^([^\.]+)$ $1.php [NC,L]2.重写动态参数URLRewriteRule ^category/([0-9]+)/([0-9]+)/?$ category.php?cat_id=$1&page=$2 [NC,L]3.重写带有查询参数的URLRewriteRule ^blog/(\d+)/?$ blog.php?id=$1 [NC,L]4.重定向旧URL至新URLRewriteRule ^old-url$ /new-url [R=301,L]5.隐藏目录结构RewriteRule ^page/([a-zA-Z0-9_-]+)/?$ index.php?page=$1 [NC,L]6.添加尾部斜杠RewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)/$ $1 [L,R=301]7.通过文件路径重定向RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?path=$1 [QSA,L]这些规则只是Apache伪静态规则的一部分,具体的使用取决于网站的具体需求和URL结构。

在使用这些规则之前,需要确保服务器已启用了RewriteEngine模块,并且.htaccess文件位于网站根目录下。

需要注意的是,使用Apache伪静态规则时需要谨慎,不当的规则设置可能导致URL冲突或死循环等问题。

apache的rewrite重写的简单命令

apache的rewrite重写的简单命令

apache的rewrite重写的简单命令Apache Rewrite模块是一种用于URL重写和转换的强大工具。

它允许网站管理员使用基于规则的方法来修改URL的结构,以此实现搜索引擎优化(SEO)和提升用户体验的目的。

在本文中,我们将一步一步介绍Apache Rewrite重写的简单命令,帮助读者了解如何使用它来实现不同的需求。

一、Apache Rewrite模块简介Apache Rewrite模块是Apache HTTP服务器的标准模块之一,它通过使用正则表达式和规则集合来重写URL。

通过使用Rewrite规则,管理员可以修改URL的结构、转发请求到其他URL,并进行其他一些操作,以符合网站的需求。

二、启用Apache Rewrite模块首先,我们需要启用Apache Rewrite模块。

在Apache服务器上,我们可以使用以下命令来启用Rewrite模块:sudo a2enmod rewrite这个命令会在Apache配置文件中添加一个符号链接,以便启用Rewrite 模块。

完成后,需要重新启动Apache服务器,使更改生效:sudo service apache2 restart三、基本的Apache Rewrite规则启用了Rewrite模块后,我们就可以开始使用它来修改URL了。

下面是一些基本的Apache Rewrite规则的示例:1. 重定向一个URL到另一个URL如果我们想将一个URL重定向到另一个URL,可以使用以下命令:RewriteRule ^old-url /new-url [R=301,L]这个规则将匹配以“old-url”结尾的URL,并将其重定向到“/new-url”。

2. 重写URL参数有时,我们想通过重写URL参数来改变URL的结构。

例如,把"/product?id=123"重写为"/product/123"。

可以使用以下命令:RewriteRule ^product/([0-9]+) /product?id=1 [L]这个规则将匹配以“product/”开头,后跟一个或多个数字的URL,并将其重写为"/product?id=(数字)"。

apache的rewrite重写的简单命令 -回复

apache的rewrite重写的简单命令 -回复

apache的rewrite重写的简单命令-回复Apache的rewrite重写是一种用于改变URL结构的强大工具。

通过Apache的rewrite模块,我们可以在服务器级别或虚拟主机级别上重写或重定向URL,以便更好地管理网站的URL结构和提供更好的用户体验。

重写操作可以在许多方面使用,例如搜索引擎优化、页面重定向和错误处理等。

本文将一步一步回答您关于Apache的rewrite重写的简单命令。

在开始之前,请确保您的服务器上已经安装了Apache,并且已经启用了Apache的rewrite模块。

您可以通过编辑Apache配置文件来启用rewrite模块。

找到并编辑Apache配置文件中的httpd.conf文件(或其他名称,具体取决于您的服务器设置)。

找到以下行,并删除前面的注释符号“#”以启用rewrite模块。

LoadModule rewrite_module modules/mod_rewrite.so完成后,请重新启动Apache服务器以使更改生效。

一旦启用了rewrite 模块,就可以使用下面的步骤来执行URL重写。

步骤一:创建.htaccess文件在需要重写URL的目录中创建一个名为.htaccess的文件。

如果您希望在整个网站上应用重写规则,请将.htaccess文件放在网站的根目录中。

如果您只想在特定目录中应用重写规则,请将.htaccess文件放在该目录中。

步骤二:启用重写规则在.htaccess文件中添加以下代码来启用重写规则。

RewriteEngine On如果.htaccess文件中已经存在其他的rewrite规则,请确保将该行代码放在已经存在的规则之前。

步骤三:编写简单的重写规则现在您可以开始编写重写规则了。

以下是一些基本的重写规则示例:1. 重写到另一个URLRewriteRule ^old-page /new-page [L,R=301]上述规则将将所有访问"/old-page"的请求重写到"/new-page"。

rewriterule用法 -回复

rewriterule用法 -回复

rewriterule用法-回复要使用RewriteRule进行重写规则,首先需要了解什么是RewriteRule以及它的用途。

RewriteRule是Apache中的一个模块,用于对URL进行重写和重定向。

它允许网站管理员根据自己的需求修改URL,以改进网站的用户体验和搜索引擎优化。

RewriteRule的基本语法如下:RewriteRule pattern target [flags]- `pattern`是一个正则表达式,用于匹配要重写的URL。

- `target`是一个字符串,用于指定要将URL重写为的新URL。

- `flags`是一些可选的标志,用于指定重写规则的行为。

下面,我将逐步回答关于RewriteRule用法的问题。

1. 为什么要使用RewriteRule?- RewriteRule允许网站管理员根据自己的需求修改URL,以改善网站的用户体验。

通过使用有意义的URL结构,用户可以更容易地理解网站的内容和页面层次结构。

- 重写URL还可以提升网站的搜索引擎优化。

搜索引擎更容易理解具有关键字和有意义结构的URL,并将其作为排名因素之一。

2. 如何配置RewriteRule?- 首先,确保你的服务器已启用Rewrite模块。

可以在Apache的配置文件中找到相关的配置项,并确保它已被取消注释。

- 在你的网站根目录下的.htaccess文件中添加RewriteRule。

如果你的网站无法使用.htaccess文件,可以在服务器的配置文件中添加RewriteRule。

3. 如何使用RewriteRule进行简单的重写?- 假设我们想将URL " 重写为"RewriteRule ^product/([0-9]+) product.php?id=1 [L]这个规则首先使用正则表达式`^product/([0-9]+)`匹配URL,并将其中的数字捕获为1。

然后将URL重写为product.php?id=1,其中1是捕获到的数字。

Apachemod_rewrite的中文配置、使用和语法介绍

Apachemod_rewrite的中文配置、使用和语法介绍

Apachemod_rewrite的中⽂配置、使⽤和语法介绍介绍和配置:以数据库后台驱动的动态内容的⽹站,经常会遇到这些的问题:当在浏览器的地址栏输⼊⼀个⽆效的参数时,会出现数据库的错误提⽰,这是⼀个安全的隐患搜索引擎⽆法收录你的所有⽹页⽹页的链接地址是⼀系列的参数,对浏览⽤户和搜索引擎都不易理解这些问题都可以通过Apache服务器的⼀个基本的模块mod_rewrite来解决,默认的安装的Apache就会装有这个模块。

要启⽤这个模块,打开 httpd.conf⽂件,察看下⾯的两⾏是否被屏蔽,第⼀⾏是载⼊mod_rewrite模块,第⼆⾏是启⽤这个模块。

LoadModule rewrite_module modules/mod_rewrite.soAddModule mod_rewrite.cmod_rewrite这个模块是如何⼯作的呢?mod_rewrite截获符合特定条件的URL,并按照设定的规则将它们改写成需要的URL。

重写的规则的表达式:RewriteRule 模式替换 [选项]RewriteRule 是⼀个简单的命令告诉mod_rewrite这个模块如何去重写,关键的地⽅在于可以在模式和替换中使⽤正则表达式来匹配相应的字符,正则表达式的⼴泛的灵活性能将动态的URL转换成各式各样的符合要求的静态URL。

看看这个重写规则:RewriteRule /products/([0-9]+)/fancy/products.php?id=$1这样,访问者就⽆法知道你的程序真正放在那个⽬录,程序的真正名字是什么,这也提⾼了⽹站的安全系数;这样的URL也去掉了?=这些字符,易于搜索引擎的机器⼈爬⾏你的⽹站。

通过正则表达式,可以写出更复杂的重写规则:RewriteRule ^/products$ /content.phpRewriteRule ^/products/([0-9]+)$ /content.php?id=$1RewriteRule ^/products/([0-9]+),([ad]*),([0-9]{0,3}),([0-9]*),([0-9]*$)重写规则的选项有‘forbidden’ 或 ‘f’ - 403 禁⽌‘gone’ 或 ‘g’ - 410 gone‘nocase’ 或 ‘NC’ - ⼤⼩写敏感‘next’/N’ - 回到第⼀条规则’skip=N’ 或 ‘S=N’ - 跳过下⾯的N条规则流程控制mod_rewrite是按照从上到下的顺序执⾏重写的规则,如果URL匹配了第⼀条规则,则按照第⼀条规则进⾏重写,如果不匹配,就执⾏第⼆条规则,直到最后。

rewriterule例子-概述说明以及解释

rewriterule例子-概述说明以及解释

rewriterule例子-概述说明以及解释1.引言1.1 概述在网络开发中,RewriteRule是一个非常重要的概念。

它是Apache 服务器上用来重写URL的模块之一,通过RewriteRule可以实现URL的重定向、重写和重新映射等功能。

这对于优化网站结构、提高用户体验、提升SEO排名等方面有着重要的作用。

通过RewriteRule,我们可以通过简单的规则来对URL进行处理,例如将动态URL转换为静态URL,实现URL的美化;重定向用户访问的旧页面到新页面,保证网站在更新迁移过程中的流量不受影响;实现不同URL地址之间的关联,提高网站的可维护性和可扩展性等。

本文将介绍RewriteRule的语法结构,以及其在实际应用中的具体示例,希望能够帮助读者更加深入地了解和应用RewriteRule这一重要的功能模块。

1.2 文章结构文章结构部分主要是讨论整篇文章的框架和组织,包括引言、正文和结论三个部分。

引言部分将介绍文章的背景和目的,引起读者的兴趣,打开话题;正文部分将详细介绍RewriteRule的相关内容,包括定义、语法和实际应用,以便读者能够全面了解RewriteRule的知识点;结论部分将总结文章的重点内容,强调RewriteRule的重要性,并展望未来的发展趋势,为整篇文章画上一个完美的句号。

文章结构部分的设计,有助于读者更好地理解和掌握文章的内容,让文章的逻辑更加清晰和连贯。

1.3 目的在本文中,我们的目的是介绍RewriteRule的概念、语法和实际应用。

通过深入理解RewriteRule,读者可以了解到如何在网站配置文件中使用RewriteRule来进行重定向和重写URL。

同时,我们也希望通过本文的介绍,让读者了解到RewriteRule在网站开发中的重要性,以及如何利用RewriteRule来优化网站的性能和用户体验。

最终,我们希望本文可以帮助读者更好地理解和掌握RewriteRule的使用方法,从而提升他们在网站开发中的技能和效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Apache模块 mod_rewrite概述此模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。

它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则 的灵活而且强大的URL操作机制。

此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成 部分的查找数据库。

此模块可以操作URL的所有部分(包括路径信息部分),在服务器级的(httpd.conf)和目录级的(.htaccess) 配置都有效,还可以生成最终请求字符串。

此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。

但是,所有这些功能和灵活性带来一个问题,那就是复杂性,因此,不要指望一天之内就能看懂整个模块。

更多的讨论、细节、示例,请查看详细的URL 重写文档。

特殊字符的引用在Apache 1.3.20中,TestString和Substitution中的特殊字符 可以用前导斜杠(\)来实现转义(即忽略其特殊含义而视之为普通字符)。

比如,Substitution可以用"\$" 来包含一个美元符号,以避免mod_rewrite把它视为反向引用。

环境变量此模块会跟踪两个额外的(非标准)CGI/SSI环境变量,SCRIPT_URL和SCRIPT_URI。

他们包含了当前资源的逻辑网络视图,而标准CGI/SSI变量SCRIPT_NAME和SCRIPT_FILENAME包 含的是物理系统视图。

注意:这些变量保持的是其最初被请求时的URI/URL,即在任何重写操作之前的 URI/URL。

其重要性在于他们是重写操作重写URL到物理路径名的原始依据。

示例SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.htmlSCRIPT_FILENAME=/u/rse/.www/index.htmlSCRIPT_URL=/u/rse/SCRIPT_URI=/u/rse/实用方案我们提供了URL 重写指南和高 级URL 重写指南文档,列举了许多基于URL的问题的实用方案,其中你可以找到真实有用的规则集。

RewriteBase 指 令URL。

在 下文中,你将看到RewriteRule 可 以用于目录级的配置文件中(.htaccess)并在局部范围内起作用,即规则实际处理的只是剥离了本地路径前缀的一部分。

处 理结束后,这个路径会被自动地附着回去。

默认值是"RewriteBase physical-directory-path"。

在对一个新的URL进行替换时,此模块必须把这个URL重新注入到服务器处理中。

为此,它必须知道其对应的URL前缀或者说URL基 准。

通常,此前缀就是对应的文件路径。

但是,大多数网站URL不是直接对应于其物理文件路径的,因而一般不能做这样的假定! 所 以在这种情况下,就必须用RewriteBase指令来指定正确的URL前缀。

如果你的网站服务器URL不是与物理文件路径直接对应的,你必须在每个使用RewriteRule 的.htaccess文 件中使用RewriteBase指令。

例如,目录级配置文件内容如下:# /abc/def/.htaccess -- /abc/def 目录的配置文件# 注意:/abc/def 是 /xyz 的物理路径(例如存在一条'Alias /xyz /abc/def'指令)。

RewriteEngine On# 让服务器知道我们使用的是 /xyz 而不是物理路径 /abc/defRewriteBase /xyz# 重写规则RewriteRule ^oldstuff\.html$ newstuff.html上述例子中,对/xyz/oldstuff.html的请求被正确地重写为对物理文件/abc/def/newstuff.html的 请求。

仅供Apache Hacker们参考以下列出了内部处理的详细步骤:请求:/xyz/oldstuff.html内部处理过程:/xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias)/abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule)/abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase)/xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias)结果:/abc/def/newstuff.html虽然这个过程看来很繁复,但是由于目录级重写的到来时机已经太晚了,它不得不把这个(重写)请求重新注入到 Apache核心中,所以Apache内部确实是这样处理的。

但是:它的开销并不象看起来的那样大,因为重新注入完全在Apache服务器内部进行,而且 这样的过程在Apache内部也为其他许多操作所使用。

所以,你可以充分信任其设计和实现是正确的。

RewriteCond 指 令RewriteRule 指 令之前可以有一个或多个RewriteCond指令。

条件之后的重写规则仅在当前URI 与Pattern匹配并且满足此处的条件(TestString能够与CondPattern匹 配)时才会起作用。

TestString是一个纯文本的字符串,但是还可以包含下列可扩展的成分:•RewriteRule反向引用 ,引用方法是:$N(0 <= N <= 9)引用当前(带有若干RewriteRule指令的)RewriteCond中 的与Pattern匹配的分组成分(圆括号!)。

•RewriteCond反向引用 ,引用方法是:%N(1 <= N <= 9)引用当前若干RewriteCond条件中最后符合的条 件中的分组成分(圆括号!)。

•RewriteMap扩展 ,引用方法是:${mapname:key|default}细节请参见RewriteMap 指令。

•服务器变量 ,引用方法是:%{NAME_OF_VARIABLE},其中的大多数在其他的手册或者CGI规范中都有说明。

其中为mod_rewrite所特有的变量如下:IS_SUBREQ如果正在处理的请求是一个子请求,它将包含字符串"true",否则就是"false"。

模块为了解析 URI中的附加文件,可能会产生子请求。

API_VERSION这是正在使用中的Apache模块API(服务器和模块之间内部接口)的版本, 其定义位于include/ap_mmn.h中。

此模块API版本对应于正在使用的Apache的版本(比如在Apache 1.3.14的发行版中这个值是19990320:10)。

通常,对它感兴趣的是模块的开发者。

THE_REQUEST这是由浏览器发送的完整的HTTP请求行(比如:"GET /index.html HTTP/1.1")。

它不包含任何浏览器发送的其它头信息。

REQUEST_URI这是在HTTP请求行中所请求的资源(比如上述例子中的"/index.html")。

REQUEST_FILENAME这是与请求相匹配的完整的本地文件系统的文件路径名。

HTTPS如果连接使用了SSL/TLS,它将包含字符串"on",否则就是"off"(无论mod_ssl 是 否已经加载,该变量都可以安全的使用)。

其它注意事项:1.SCRIPT_FILENAME和REQUEST_FILENAME包含的值是相同的——即Apache服务器内部的request_rec结构中的filename字段。

第一个就是大家都知道的CGI变量名,而第二个则是REQUEST_URI(request_rec结 构中的uri字段)的一个副本。

2.特殊形式:%{ENV:variable},其中的variable可以是任意 环境变量。

它是通过查找Apache内部结构或者(如果没找到的话)由Apache服务器进程通过getenv()得到的。

3.特殊形式:%{SSL:variable},其中的variable可以是一个SSL 环境变量的名字,无论mod_ssl 模 块是否已经加载都可以使用(未加载时为空字符串)。

比如:%{SSL:SSL_CIPHER_USEKEYSIZE}将会被替换为128。

4.特殊形式:%{HTTP:header},其中的header可以是任意 HTTP MIME头的名称。

它总是可以通过查找HTTP请求而得到。

比如:%{HTTP:Proxy-Connection}将 被替换为Proxy-Connection:HTTP头的值。

5.预设形式:%{LA-U:variable},variable的最终值在执行 一个内部(基于URL的)子请求后确定。

当需要使用一个目前未知但是会在之后的过程中设置的变量的时候,就可以使用这个方法。

例如,需要在服务器级配置(httpd.conf文件)中根据REMOTE_USER变 量进行重写, 就必须使用%{LA-U:REMOTE_USER}。

因为此变量是由URL重写(mod_rewrite)步骤之 后的认证步骤设置的。

但是另一方面,因为mod_rewrite是通过API修正步骤来实现目录级(.htaccess文 件)配置的, 而认证步骤先于API修正步骤,所以可以用%{REMOTE_USER}。

6.预设形式:%{LA-F:variable},variable的最终值在执行 一个内部(基于文件名的)子请求后确定。

大多数情况下和上述的LA-U是相同的。

CondPattern是条件模式,即一个应用于当前TestString实例的正则表达式。

TestString将 被首先计算,然后再与CondPattern匹配。

注意:CondPattern是一个perl兼容的正则表达式, 但是还有若干增补:1.可以在CondPattern串的开头使用'!'(惊叹号)来指定不 匹配。

2.CondPatterns有若干特殊的变种。

除了正则表达式的标准用法,还有下列用法:•'<CondPattern'(词典顺序的小于)将CondPattern视为纯字符串,与TestString按词典顺序进行比较。

如果TestString小 于CondPattern则为真。

相关文档
最新文档