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.net、www.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}" ) }