项目

通用

个人资料

操作

URL 重定向

模块: mod_redirect

描述

redirect 模块用于为一组 URL 指定重定向。

注意:正则表达式匹配是针对完整的 REQUEST_URI,包括可选的 path-info 和查询字符串。

选项

选项 描述 注意
url.redirect 用于生成 HTTP Location 重定向的 URL 路径匹配规则
url.redirect-code 定义与重定向 URL 一同发送的 HTTP 代码(默认:301)
(默认:HTTP/1.1 及更高版本为 308 (自 1.4.75 起))
(自 1.4.31 起)

url.redirect-code

与 HTTP 重定向一同发送的 HTTP 状态码(默认:301)
例如 url.redirect-code = 302

如果客户端应使用相同的方法(例如 POST)向重定向目标发送请求,则应使用代码 307 或 308。
例如 url.redirect-code = 307
https://mdn.org.cn/en-US/docs/Web/HTTP/Status

url.redirect

用于生成 HTTP Location 重定向的 URL 路径匹配规则

url.redirect = (
  "^/show/([0-9]+)/([0-9]+)$" => "https://www.example.org/show.php?isdn=$1&page$2",
  "^/get/([0-9]+)/([0-9]+)$"  => "https://www.example.org/get.php?isdn=$1&page$2" 
)

# make an external redirect from any www.host (with www.) to the host (without www.)
$HTTP["host"] =~ "^www\.(.*)$" {
    url.redirect = ("" => "https://%1${url.path}${qsa}")
}

(更详细的文档可在 mod_rewrite 文档的正则表达式部分找到)

请注意,`url.redirect` 目标中的“%1”指的是直接包含 `url.redirect` 的条件正则表达式 (.*) 中的括号子表达式。它**不**具有“%1”在 evhost.path-pattern(其中表示“顶级域名”)中可能具有的含义。如果在正则表达式条件(`=~`)中指定了 `url.redirect`,则 % 模式将替换为条件正则表达式中对应的组。%1 替换为第一个子表达式,%2 替换为第二个,依此类推。%0 替换为匹配正则表达式的整个子字符串。有关使用 % 模式的示例,请参见上文和下文。负匹配(`!~`)不会保存任何 % 模式。

重定向规则将一直评估到第一个匹配的重定向规则。作为一种特殊情况,为了在**不**触发重定向的情况下短路重定向规则,请指定一个空白目标:`url.redirect = ( "^/do-not-redirect/this/path" => "" )`。然后,一个进一步的包罗万象的重定向规则可能会重定向其他所有内容。这可以作为其他条件内部嵌套条件的替代方案。空白目标特殊情况在 1.4.40 或更高版本中可用。

示例

如何将HTTP重定向到HTTPS - 将任何 HTTP 请求重定向到 HTTPS,即强制使用 SSL

(更详细的文档可在 mod_rewrite 文档的正则表达式部分找到)

有些人喜欢 URL 中的 www 部分。一个将所有非“www.”主机移动到“www.”等效项的通用解决方案

$HTTP["host"] !~ "^www\." {
    url.redirect = ("" => "https://www.${url.authority}${url.path}${qsa}")
}

将除少数以外的所有 *.example.org 子域名重定向到 www.example.org
$HTTP["host"] !~ "^(?:www|mail|mysql)\.example\.org$" {
    url.redirect = ("" => "https://www.example.org${url.path}${qsa}")
} 

将 example.xxx、www.example.netwww.example.org 重定向到 www.example.com
$HTTP["host"] =~ "^(?:example\.(?:com|net|org)|(?:www\.)?example\.(?:net|org))$" {
  url.redirect = ( "" => "https://www.example.com${url.path}${qsa}" )
}

反方向,将 www.example.com 重定向到 example.com
$HTTP["host"] == "www.example.com" {
  url.redirect  = ( "" => "https://example.com${url.path}${qsa}" )
}

将所有以“www.”开头的域名重定向到没有“www.”前缀的域名
$HTTP["host"] =~ "^www\.(.*)$" {
  url.redirect  = ( "" => "https://%1${url.path}${qsa}" )
}

类似配置可用于将所有 .net/.org 等请求重定向到该站点的 .com 地址
$HTTP["host"] =~ "^(?:www\.)?example\.(?:net|org)$" {
  url.redirect  = ( "" => "https://example.com${url.path}${qsa}" )
}

gstrauss 更新,11 个月前 · 36 次修订