描述: | 提供基于规则的重写引擎来即时重写请求的URL |
---|---|
状态: | 延期 |
模块标识符: | rewrite_module |
源文件: | mod_rewrite.c |
该mod_rewrite
模块基于PCRE正则表达式解析器,使用基于规则的重写引擎来实时重写请求的URL。默认情况下,mod_rewrite
将URL映射到文件系统路径。但是,它也可以用于将一个URL重定向到另一个URL,或调用内部代理获取。
mod_rewrite
提供了一种灵活而强大的方式,可以使用无限数量的规则来操作URL。每个规则可以具有无限数量的附加规则条件,以允许您基于服务器变量,环境变量,HTTP标头或时间戳重写URL。
mod_rewrite
对完整的URL路径(包括path-info部分)进行操作。可以在中httpd.conf
或中调用重写规则
.htaccess
。重写规则生成的路径可以包含查询字符串,或者可以导致内部子处理,外部请求重定向或内部代理吞吐量。
详细的mod_rewrite文档中提供了更多详细信息,讨论和示例 。
mod_rewrite
在提供详细记录其行为trace1
对trace8
日志级别。可以mod_rewrite
使用以下LogLevel
指令专门设置日志级别:到level为止debug
,不记录任何操作,而trace8
实际上意味着记录了所有操作。
mod_rewrite
会大大降低Apache HTTP Server的速度!使用比trace2
仅用于调试更高的日志级别!
LogLevel alert rewrite:trace3
那些熟悉早期版本的
mod_rewrite
人无疑会在寻找
RewriteLog
and RewriteLogLevel
指令。上面提到的新的每模块日志记录配置已完全取代了此功能。
要仅获取mod_rewrite
特定于日志的消息,请通过grep通过管道传递日志文件:
tail -f error_log|fgrep '[rewrite:'
描述: | 设置每个目录重写的基本URL |
---|---|
句法: | RewriteBase URL-path |
默认: | None |
内容: | 目录.htaccess |
覆写: | 文件信息 |
状态: | 延期 |
模块: | mod_rewrite |
该RewriteBase
伪指令指定要用于RewriteRule
替代相对路径的按目录(htaccess)伪指令使用的URL前缀
。
在每个目录(htaccess)上下文中的替换中使用相对路径时,除非满足以下任一条件,否则此指令是必需的:
DocumentRoot
(而不是通过其他方式(例如Alias
)可以到达
)。RewriteRule
也作为服务器上的URL路径有效(这是罕见的)。Alias
或映射请求时,可以忽略此伪指令
mod_userdir
。在以下示例中,RewriteBase
有必要避免重写为http://example.com/opt/myapp-1.2.3/welcome.html,因为该资源与文档根目录无关。这种配置错误通常会导致服务器在文档根目录下查找“ opt”目录。
DocumentRoot "/var/www/example.com" AliasMatch "^/myapp" "/opt/myapp-1.2.3" <Directory "/opt/myapp-1.2.3"> RewriteEngine On RewriteBase "/myapp/" RewriteRule "^index\.html$" "welcome.html" </Directory>
描述: | 定义重写的条件 |
---|---|
句法: | RewriteCond
TestString CondPattern [flags] |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 延期 |
模块: | mod_rewrite |
该RewriteCond
指令定义规则条件。一个或多个
指令RewriteCond
可以位于RewriteRule
指令之前。然后,仅当URI的当前状态都与它的模式匹配并且满足这些条件时,才使用以下规则。
TestString是一个字符串,除了纯文本之外,它还可以包含以下扩展结构:
$N
(0 <= N <= 9)的反向引用。$ 1到$ 9允许访问模式的分组部分(括号中),
RewriteRule
该部分受当前RewriteCond
条件的限制。$ 0提供对该模式匹配的整个字符串的访问。
%N
(0 <= N <= 9)的反向引用。从%1到%9,可以从RewriteCond
当前条件集中的最后一个匹配项访问模式的分组部分(再次用括号括起来)
。%0提供对该模式匹配的整个字符串的访问。
${mapname:key|default}
。有关更多详细信息,请参见RewriteMap文档。
%{
NAME_OF_VARIABLE的
}
变量,
其中NAME_OF_VARIABLE可以是以下列表中的字符串:
HTTP标头: | 连接和请求: | |
---|---|---|
HTTP_ACCEPT HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_REFERER HTTP_USER_AGENT |
AUTH_TYPE CONN_REMOTE_ADDR CONTEXT_PREFIX CONTEXT_DOCUMENT_ROOT IPV6 PATH_INFO QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_PORT REMOTE_USER REQUEST_METHOD SCRIPT_FILENAME |
|
服务器内部: | 日期和时间: | 特价: |
DOCUMENT_ROOT SCRIPT_GROUP SCRIPT_USER SERVER_ADDR SERVER_ADMIN SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE |
TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME |
API_VERSION CONN_REMOTE_ADDR HTTPS IS_SUBREQ REMOTE_ADDR REQUEST_FILENAME REQUEST_SCHEME REQUEST_URI THE_REQUEST |
这些变量都对应于类似命名的HTTP MIME标头,Apache HTTP Server的C变量或
struct tm
Unix系统的字段。大多数文档在此处
或《手册》或CGI规范的其他地方都有记录。
SERVER_NAME和SERVER_PORT依赖的价值观
UseCanonicalName
和
UseCanonicalPhysicalPort
分别。
特殊之处mod_rewrite
包括以下内容。
API_VERSION
CONN_REMOTE_ADDR
mod_remoteip
模块)。HTTPS
mod_ssl
加载,都可以安全地使用此变量
)。IS_SUBREQ
REMOTE_ADDR
mod_remoteip
模块)。REQUEST_FILENAME
REQUEST_FILENAME
引用与请求匹配的文件或脚本的完整本地文件系统路径(如果已由服务器确定的话)
。否则,例如在虚拟主机上下文中使用时,该值与相同REQUEST_URI
。根据的值
AcceptPathInfo
,服务器可能只使用的某些前导组件
REQUEST_URI
将请求映射到文件。
REQUEST_SCHEME
ServerName
。REQUEST_URI
QUERY_STRING
。THE_REQUEST
GET
/index.html HTTP/1.1
”)。这不包括浏览器发送的任何其他标头。与以下大多数其他变量不同,该值尚未被转义(解码)。如果TestString具有特殊值expr
,则CondPattern将被视为
ap_expr。如果novary
未指定该标志,则表达式中引用的HTTP标头将添加到Vary标头中。
您应该注意的其他事项:
变量SCRIPT_FILENAME和REQUEST_FILENAME包含相同的值-Apache HTTP Server filename
内部request_rec
结构的字段
的值
。第一个名称是众所周知的CGI变量名称,第二个名称是REQUEST_URI的对应名称(其中包含uri
字段的值
request_rec
)。
如果发生替换并且重写继续,则两个变量的值将相应更新。
如果在每个服务器的上下文中使用(即,在将请求映射到文件系统之前),则SCRIPT_FILENAME和REQUEST_FILENAME不能包含完整的本地文件系统路径,因为在此处理阶段该路径未知。在这种情况下,两个变量最初都将包含REQUEST_URI的值。为了在每个服务器上下文中获取请求的完整本地文件系统路径,请使用基于URL的预见%{LA-U:REQUEST_FILENAME}
来确定REQUEST_FILENAME的最终值。
%{ENV:variable}
,其中变量可以是任何环境变量。这是通过内部Apache httpd结构查找的(如果未在其中找到),则可以通过getenv()
Apache httpd服务器进程进行查找
。%{SSL:variable}
,其中variable是SSL环境变量的名称,无论是否mod_ssl
加载,均可使用,但如果未
加载,则始终扩展为空字符串。示例:
%{SSL:SSL_CIPHER_USEKEYSIZE}
可以扩展为
128
。即使不设置指令的StdEnvVars
选项,
这些变量也可用SSLOptions
。%{HTTP:header}
(标头可以是任何HTTP MIME标头名称),始终可以用来获取HTTP请求中发送的标头的值。示例:%{HTTP:Proxy-Connection}
是HTTP标头`` Proxy-Connection:
''的值。
如果在条件中使用了HTTP标头,则该标头会添加到响应的Vary标头中,以防条件对请求的评估为true。这是不是如果条件的计算结果为false,请求加入。为了适当地缓存,需要将HTTP标头添加到响应的Vary标头中。
必须记住,在“ ornext|OR
”标志的情况下,条件遵循短路逻辑,因此可能根本无法评估某些条件。
%{LA-U:variable}
可以用于执行内部(基于URL)子请求以确定variable最终值的前瞻。这可以用于访问变量以进行重写,该变量在当前阶段尚不可用,但将在以后的阶段中进行设置。
例如,要根据改写
REMOTE_USER
从单个服务器中(内变量httpd.conf
文件),你必须使用%{LA-U:REMOTE_USER}
这个变量是由授权阶段,哪来设置-
以后的URL转换阶段(在此期间
mod_rewrite
操作)。
另一方面,由于通过API的Fixup阶段mod_rewrite
实现了其每个目录的上下文(.htaccess
文件),并且由于授权阶段早于该阶段,因此您只能%{REMOTE_USER}
在该上下文中使用
。
%{LA-F:variable}
可用于执行内部(基于文件名的)子请求,以确定variable的最终值。在大多数情况下,这与上面的LA-U相同。CondPattern是条件模式,它是一个正则表达式,适用于TestString的当前实例。 首先对TestString进行评估,然后再与CondPattern进行匹配 。
CondPattern通常是与 perl兼容的正则表达式,但是还有其他语法可用于对Teststring执行其他有用的测试:
!
无论使用哪种CondPattern,都可以在模式字符串前添加' '字符(感叹号)以否定条件结果。
""
(两个引号),则将TestString与空字符串进行比较。RewriteCond %{HTTP_USER_AGENT} "=This Robot/1.0"
!-eq
。是现有的URL,通过子请求。
检查TestString是否是有效的URL,可通过该路径的所有服务器当前配置的访问控件进行访问。这使用内部子请求进行检查,因此请谨慎使用-可能会影响服务器的性能!
该标志仅返回有关访问控制,身份验证和授权之类的信息。该标志 不返回有关配置的处理程序(静态文件,CGI,代理等)将返回的状态代码的信息。
RewriteCond /var/www/%{REQUEST_URI} !-f RewriteRule ^(.+) /other/archive/$1 [R]
如果TestString具有特殊值expr
,则
CondPattern将被视为
ap_expr。
在下面的示例中,-strmatch
用于比较REFERER
站点主机名和站点主机名,以阻止不需要的热链接。
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'" RewriteRule "^/images" "-" [F]
您还可以通过将标志添加
为
指令的第三个参数来为CondPattern设置特殊标志,其中标志是以下任何标志的逗号分隔列表:[
]
RewriteCond
nocase|NC
”(ñ ö Ç ASE)ornext|OR
'(或下一个条件)RewriteCond "%{REMOTE_HOST}" "^host1" [OR] RewriteCond "%{REMOTE_HOST}" "^host2" [OR] RewriteCond "%{REMOTE_HOST}" "^host3" RewriteRule ...some special stuff for any of these hosts...没有此标志,您将必须写入条件/规则对三遍。
novary|NV
”(ñ ö v进制)例:
要根据请求的`` User-Agent:
''标题重写站点的主页,可以使用以下命令:
RewriteCond "%{HTTP_USER_AGENT}" "(iPhone|Blackberry|Android)" RewriteRule "^/$" "/homepage.mobile.html" [L] RewriteRule "^/$" "/homepage.std.html" [L]
说明:如果使用将自身标识为移动浏览器的浏览器(请注意,示例不完整,因为还有许多其他移动平台),则将提供主页的移动版本。否则,将提供标准页面。
描述: | 启用或禁用运行时重写引擎 |
---|---|
句法: | RewriteEngine on|off |
默认: | RewriteEngine off |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 延期 |
模块: | mod_rewrite |
该RewriteEngine
指令启用或禁用运行时重写引擎。如果设置
off
为该模块,则不执行任何运行时处理。它甚至不更新SCRIPT_URx
环境变量。
使用此伪指令可以在特定上下文中禁用规则,而不是注释掉所有RewriteRule
伪指令。
请注意,重写配置不会被虚拟主机继承。这意味着您需要RewriteEngine on
为每个要在其中使用重写规则的虚拟主机指定一个
指令。
RewriteMap
如果类型的指令是在prg
未RewriteEngine
设置为
的上下文中定义的,则不会在服务器初始化期间启动on
描述: | 定义用于键查找的映射功能 |
---|---|
句法: | RewriteMap MapName MapType:MapSource
[MapTypeOptions]
|
内容: | 服务器配置,虚拟主机 |
状态: | 延期 |
模块: | mod_rewrite |
兼容性: | 第三个参数MapTypeOptions仅在Apache 2.4.29和更高版本中可用 |
该RewriteMap
指令定义了一个
重写映射,映射功能可在规则替换字符串中使用该映射,以通过键查找来插入/替换字段。查找的来源可以有多种类型。
该MAPNAME是地图的名称,将被用于通过以下构建体中的一个来指定一个重写规则的替换字符串的映射功能:
${
MapName :
LookupKey }
${
MapName :
LookupKey |
默认值
}
当发生这种构造时,将查询映射MapName并查找键LookupKey。如果找到了键,则将map-function构造替换为 SubstValue。如果未找到该密钥然后它被取代的默认值或由空字符串,如果没有默认值被指定。空值的行为就像缺少键一样,因此无法区分空值键和不存在键。
例如,您可以将定义
RewriteMap
为:
RewriteMap examplemap "txt:/path/to/file/map.txt"
然后,您将可以按以下方式使用此地图
RewriteRule
:
RewriteRule "^/ex/(.*)" "${examplemap:$1}"
MapTypeOptions参数的含义取决于特定的MapType。有关更多信息,请参见 Using RewriteMap。
可以使用MapType和 MapSource的以下组合:
httxt2dbm
实用工具从纯文本文件格式构建的。(详细...)RewriteMap
:toupper,tolower,escape或unscape。(详细...)可以在RewriteMap HowTo中找到更多详细信息和大量示例。
描述: | 为重写引擎设置一些特殊选项 |
---|---|
句法: | RewriteOptions Options |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 延期 |
模块: | mod_rewrite |
该RewriteOptions
指令为当前的每服务器或每目录配置设置一些特殊选项。该选项字符串目前只能是以下情况之一:
Inherit
这将强制当前配置继承父项的配置。在每个虚拟服务器上下文中,这意味着继承了主服务器的映射,条件和规则。在每个目录的上下文中,这意味着父目录的.htaccess
配置或
<Directory>
节的条件和规则将
被继承。继承的规则实际上被复制到使用此伪指令的部分。如果与本地规则结合使用,则继承的规则将被复制到本地规则之后。该指令的位置-低于或高于本地规则-对此行为没有影响。如果本地规则强制停止重写,则继承的规则将不被处理。
InheritBefore
与Inherit
上面类似,但是来自父作用域的规则在子作用域中指定的规则之前应用。
在Apache HTTP Server 2.3.10及更高版本中可用。
InheritDown
如果启用此选项,则所有子配置将继承当前配置的配置。等效于RewriteOptions Inherit
在所有子配置中指定。有关Inherit
如何处理父子关系的更多详细信息,请参见该选项。
在Apache HTTP Server 2.4.8和更高版本中可用。
InheritDownBefore
与InheritDown
上述类似,但当前作用域中的规则会在任何子作用域中指定的规则之前应用。
在Apache HTTP Server 2.4.8和更高版本中可用。
IgnoreInherit
此选项强制当前和子级配置忽略将从指定为InheritDown
或的父级继承的所有规则
InheritDownBefore
。
在Apache HTTP Server 2.4.8和更高版本中可用。
AllowNoSlash
默认情况下,mod_rewrite
将忽略映射到磁盘上目录但没有尾部斜杠的URL,以期望mod_dir
模块将向客户端发出带有尾部斜杠的规范URL的重定向。
当DirectorySlash
伪指令设置为off时,AllowNoSlash
可以启用该选项以确保不再忽略重写规则。如果需要,可以使用此选项在与目录匹配的.htaccess文件中应用重写规则,而不用斜杠。
在Apache HTTP Server 2.4.0和更高版本中可用。
AllowAnyURI
当RewriteRule
在VirtualHost
httpd 2.2.22或更高版本的服务器上下文中使用时,mod_rewrite
仅当请求URI是URL-path时才处理重写规则。这避免了某些安全问题,在这些问题中特定规则可能允许“令人惊讶的”模式扩展(请参阅CVE-2011-3368
和CVE-2011-4317)。为了解除对与URL路径匹配的限制,AllowAnyURI
可以启用该
选项,并将
mod_rewrite
规则集应用于任何请求URI字符串,而不管该字符串是否与HTTP规范要求的URL路径语法匹配。
在Apache HTTP Server 2.4.3和更高版本中可用。
如果与未经仔细编写的重写规则一起使用,启用此选项将使服务器容易受到安全性问题的影响。这是强烈建议
未使用此选项。尤其要提防包含' @
'字符的输入字符串,这些字符串可能会根据上述CVE名称更改已转换URI的解释。
MergeBase
使用此选项,RewriteBase
会将的值从显式定义的位置复制到任何未定义其自己的子目录或子位置
RewriteBase
。这是2.4.0到2.4.3中的默认行为,并且可以使用Apache HTTP Server 2.4.4和更高版本来恢复该标志。
IgnoreContextInfo
当在目录(htaccess)上下文中进行相对替换并且RewriteBase
尚未设置时,此模块使用一些扩展的URL和文件系统上下文信息将相对替换更改回URL。诸如mod_userdir
和mod_alias
提供此扩展上下文信息的模块
。在2.4.16及更高版本中可用。
LegacyPrefixDocRoot
在2.4.26之前,如果替换是与当前虚拟主机匹配的绝对URL,则可能首先将URL简化为URL路径,然后再将其简化为本地路径。由于可以将URL简化为本地路径,因此该路径应以文档根作为前缀。当使用以下命令向http:// host / file / myfile发出请求时,这可以防止访问/ tmp / myfile之类的文件
RewriteRule
。
RewriteRule /file/(.*) http://localhost/tmp/$1
此选项允许使用旧的行为,即文档根目录不以从URL简化的本地路径作为前缀。在2.4.26及更高版本中可用。
描述: | 定义重写引擎的规则 |
---|---|
句法: | RewriteRule
Pattern Substitution [flags] |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 延期 |
模块: | mod_rewrite |
该RewriteRule
指令是真正的重写主力。该指令可以多次出现,每个实例定义一个重写规则。定义这些规则的顺序很重要-这是它们在运行时应用的顺序。
模式是与Perl兼容的正则表达式。与该模式进行比较的方式取决于RewriteRule
指令的定义位置。
在VirtualHost
上下文中,模式将首先与主机名和端口之后,查询字符串(例如“ /app1/index.html”)之前的URL部分匹配。这是(%解码)URL路径。
在每个目录上下文(Directory
和.htaccess)中,模式仅与部分路径匹配,例如,对“ /app1/index.html”的请求可能与“ app1 / index.html”或“ index”进行比较。 html”,具体取决于的RewriteRule
定义位置。
在比较之前,将定义规则的目录路径从当前映射的文件系统路径中剥离(直到并包括尾斜杠)。逐目录前缀剥离的最终结果是,此上下文中的规则仅与定义该规则的当前映射文件系统路径“以下”部分匹配。
诸如DocumentRoot
和的指令Alias
,甚至是先前RewriteRule
替换的结果,都确定当前映射的文件系统路径。
如果你想对阵的主机名,端口或查询字符串,使用
RewriteCond
与
%{HTTP_HOST}
,%{SERVER_PORT}
或
%{QUERY_STRING}
分别变量。
<Directory>
部分中使用,但会带来一些额外的复杂性。RewriteEngine On
”,并且Options FollowSymLinks
必须启用
“ ”。如果您的管理员已禁用FollowSymLinks
对用户目录的覆盖,则您将无法使用重写引擎。出于安全原因,此限制是必需的。RewriteBase
哪些前缀添加回相对替换的更多信息,请参见指令。%{REQUEST_URI}
变量RewriteCond
。^/
。<Location>
和<Files>
部分中(包括对应的正则表达式)在语法上允许使用重写规则,但这永远是不必要的,不受支持。在这些情况下可能打破的特征是相对替换。If
块遵循目录上下文的规则。RewriteOptions
指令可以更改此行为,例如使用“ 继承”设置。RewriteOptions
还规定,在配置相同嵌套级别的陈述部分的行为。在下面的示例中,默认情况下,仅If
考虑第二个块中声明的RewriteRules
,因为第一个被重写。使用RewriteOptions
继承会强制mod_rewrite合并两个部分并考虑两组语句,而不是仅考虑最后一组。<If "true"> # Without RewriteOptions Inherit, this rule is overridden by the next # section and no redirect will happen for URIs containing 'foo' RewriteRule foo http://example.com/foo [R] </If> <If "true"> RewriteRule bar http://example.com/bar [R] </If>
有关正则表达式的一些提示,请参见mod_rewrite简介。
在中mod_rewrite
,NOT字符(' !
')也可用作可能的模式前缀。这使您可以否定模式。例如:`` 如果当前URL 与该模式不匹配 ''。这可以用于例外情况,在这种情况下更容易匹配否定模式,或者用作最后的默认规则。
$N
在替换字符串中使用!
该替换重写规则的是,取代了由匹配原始URL路径字符串模式。该换人可能是:
DocumentRoot
要服务于资源-relative路径。请注意,mod_rewrite
通过检查路径的第一段是否存在于文件系统的根目录中来尝试猜测是指定了文件系统路径还是URL路径。例如,如果您将Substitution字符串指定为
/www/file.html
,那么它将被视为URL路径,除非www
在根目录或文件系统中存在一个名为目录的目录(或者,如果在.htaccess
文件中使用重写,则相对于您的文档根目录),在这种情况下,它将被视为文件系统路径。如果您希望使用其他URL映射指令(例如Alias
)应用于要生成的URL路径,请使用[PT]
如下所述的标志。mod_rewrite
检查主机名是否与当前主机匹配。如果是这样,则将方案和主机名删除,并将得到的路径视为URL路径。否则,将对给定URL执行外部重定向。要强制外部重定向回到当前主机,请参见[R]
下面的标志。-
(短跑)除纯文本外,替换字符串还可以包括
$N
对RewriteRule模式的反向引用()%N
)到最后匹配的RewriteCond模式%{VARNAME}
)中的服务器变量${mapname:key|default}
)反向引用是形式为$
N
(N = 0..9)的标识符,该标识符
将由匹配Pattern的第N组内容替换。服务器变量是相同的的TestString一个的
指令。映射功能来自该
指令,并在此处进行了说明。这三种类型的变量按上述顺序扩展。RewriteCond
RewriteMap
重写规则按照在配置文件中定义的顺序应用于以前的重写规则的结果。URL路径或文件系统路径(请参见上面的“与之匹配的内容?”,上面的内容)已完全由Substitution替换,重写过程将继续进行,直到应用了所有规则,或者由L
flag或其他标志显式终止了
表示立即终止,例如
END
或
F
。
默认情况下,查询字符串不变。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串中使用问号来表示应将以下文本重新插入到查询字符串中。当您要删除现有的查询字符串时,只需用问号结束替换字符串。要组合新旧查询字符串,请使用该
[QSA]
标志。
另外,您可以通过将标志
作为
指令的第三个参数附加到指令中来设置要执行的特殊操作。标志是下表中任何标志的逗号分隔列表,并用方括号括起来。有关每个标志的更多详细信息和示例,请参见“ 重写标志”文档。[
]
RewriteRule
标志和语法 | 功能 |
---|---|
乙 | 应用转换之前,请在反向引用中转义非字母数字字符。细节 ... |
backrefnoplus | BNP | 如果要对反向引用进行转义,则应将空格转义为%20而不是+。在路径组件而不是查询字符串中使用反向引用时很有用。细节 ... |
链| C | 规则链接到以下规则。如果规则失败,则链接到该规则的规则将被跳过。细节 ... |
cookie | CO = NAME:VAL | 在客户端浏览器中设置cookie。完整语法为:CO = 名称:VAL:域 [:生存期 [:路径 [:安全 [:httponly ]]]]] 详细信息... |
丢弃路径| DPI | 导致重写的URI的PATH_INFO部分被丢弃。细节 ... |
结束 | 立即停止重写过程,不要再应用任何规则。还可以防止在每个目录和.htaccess上下文中进一步执行重写规则。(在2.3.9及更高版本中可用) 详细信息... |
env | E = [!] VAR [:VAL ] | 导致设置环境变量VAR(如果提供,则设置为VAL值)。表格 !VAR导致未设置环境变量VAR。 细节 ... |
禁止| F | 向客户端浏览器返回403 FORBIDDEN响应。 细节 ... |
走了| G | 向客户端浏览器返回410 GONE响应。细节 ... |
处理程序| H = 内容处理程序 | 导致将结果URI发送到指定的 Content-handler进行处理。细节 ... |
最后| L | 立即停止重写过程,不要再应用任何规则。特别要注意每个目录和.htaccess上下文的注意事项(另请参阅END标志)。细节 ... |
下一个| N | 以规则集的结果为起点,从第一条规则开始重新运行重写过程。细节 ... |
nocase | NC | 使模式比较不区分大小写。 细节 ... |
noescape | NE | 防止mod_rewrite在重写结果中应用特殊字符的十六进制转义。细节 ... |
nosubreq | NS | 如果当前请求是内部子请求,则导致规则被跳过。细节 ... |
代理| P | 强制将替代URL作为代理请求在内部发送。细节 ... |
直通| PT | 强制将结果URI传递回URL映射引擎,以处理其他URI到文件名的翻译器,例如Alias 或
Redirect 。细节 ... |
qsappend | QSA | 将来自原始请求URL的任何查询字符串追加到在重写目标中创建的任何查询字符串。细节 ... |
qsdiscard | QSD | 丢弃所有附加到传入URI的查询字符串。 细节 ... |
qslast | QSL | 将最后一个(最右边)问号解释为查询字符串定界符,而不是通常使用的第一个(最左边)问号。在2.4.19及更高版本中可用。 细节 ... |
redirect | R [= 代码 ] | 强制进行外部重定向,可以选择使用指定的HTTP状态代码。细节 ... |
跳过| S = num | 如果当前规则匹配,则告诉重写引擎跳过下一个num规则。细节 ... |
type | T = MIME类型 | 强制目标文件的MIME类型为指定的类型。细节 ... |
当替换字符串以类似于“ /〜user”的字符串开头(通过显式文本或反向引用)时,将mod_rewrite
执行主目录扩展,而与的存在或配置无关mod_userdir
。
在
指令上使用PT标志时,不会发生这种扩展RewriteRule
。
以下是所有可能的替换组合及其含义:
内部服务器(httpd.conf
)
中的请求`` GET
/somepath/pathinfo
'':
给定规则 | 结果替代 |
---|---|
^ / somepath(。*)otherpath $ 1 | 无效,不支持 |
^ / somepath(。*)otherpath $ 1 [R] | 无效,不支持 |
^ / somepath(。*)otherpath $ 1 [P] | 无效,不支持 |
^ / somepath(。*)/ otherpath $ 1 | / otherpath / pathinfo |
^ / somepath(。*)/ otherpath $ 1 [R] | 通过外部重定向http:// thishost / otherpath / pathinfo |
^ / somepath(。*)/ otherpath $ 1 [P] | 没有意义,不受支持 |
^ / somepath(。*)http:// thishost / otherpath $ 1 | / otherpath / pathinfo |
^ / somepath(。*)http:// thishost / otherpath $ 1 [R] | 通过外部重定向http:// thishost / otherpath / pathinfo |
^ / somepath(。*)http:// thishost / otherpath $ 1 [P] | 没有意义,不受支持 |