使用 mod_rewrite 重定向

要完成更复杂的任务,例如操作查询字符串,我们需要 mod_rewrite 模块提供的工具。
它使用基于规则的重写引擎来重写请求的 URL。
默认情况下,它将 URL 映射到文件系统路径。
此外,它还可用于将 URL 重定向到另一个 URL。

mod_rewrite 模块允许使用无限规则,每个规则可以有几个添加的规则条件,以允许根据环境变量、服务器变量、HTTP 标头和时间戳重写 URL。

它不会重定向但会重写 URL。
重写和重定向之间的主要区别在于,重写 URL 涉及服务器返回与客户端提供的请求不同的请求。

当无法使用其他替代方案时,必须将 mod_rewrite 模块视为最后一个选项。
当有其他更简单的替代方案时使用它会导致配置脆弱且难以维护。

要启用 mod_rewrite,我们必须始终使用以下作为 .htaccess 文件中规则的第一行:

RewriteEngine on

mod_rewrite 模块使用 RewriteRule 和 RewriteCond 指令。

使用 RewriteRule 指令

该指令指定重写引擎的规则并遵循以下语法:

RewriteRule [pattern] [substitution] [flags]
  • 模式使用正则表达式解释请求的 URL。
  • 替换是页面的实际 URL,它由我们要显示的信息组成。它可以是完整的文件系统路径、相对于文档根目录的 Web 路径或者绝对 URL。
  • 标志是可选的,它们在 RewriteRule 指令的末尾呈现标记,可以改变表达式的行为。

使用 RewriteCond 指令

有时,RewriteRule 以 RewriteCond 开头,以指定重写将采取的条件。
RewriteCond 指令遵循以下语法:

RewriteCond [test string] [condition] [flags]
  • 测试字符串通常是格式为 %{VARIABLE NAME} 的服务器变量。
  • 条件可以是正则表达式、字符串比较或者文件/路径测试。
  • 标志在这里也是可选的。

mod_rewrite 模块不会更改浏览器地址列的内容,因此旧 URL 的用户甚至无法识别页面已被重命名。

使用 mod_alias 重定向

mod_alias 处理简单的 URL 操作任务。
它提供了 Redirect 和 RedirectMatch 指令作为一种将一个 URL 重定向到另一个 URL 的方法。
这种重定向必须使用这些指令而不是 RewriteRule 来完成。

使用重定向指令

Redirect 指令允许我们使用 Apache 执行简单的一页重定向。
它通过要求客户端在新位置再次获取资源来将旧 URL 与新 URL 连接起来。
Redirect 指令至少需要两个参数:旧 URL 和新 URL。

要完成重定向,请将以下几行添加到服务器配置中:

例子

<VirtualHost *:80>
	ServerName www.domain1.com
	Redirect/http://www.domain2.com
</VirtualHost>
<VirtualHost *:80>
	ServerName www.domain2.com
	. . .
	. . .
</VirtualHost>

将所有对“www.domain1.com”的请求定向到“www.domain2.com”。

正如我们已经提到的,它仅适用于单个页面,而不适用于整个。

由于我们没有使用 status 参数,因此重定向是临时的,例如:HTTP status 302.
这意味着临时移动的资源。
如果我们想要永久重定向,请使用以下任一行:

Redirect 301 /oldlocation http://www.domain2.com/newlocation
Redirect permanent /oldlocation http://www.domain2.com/newlocation

因此,我们可以使用 status 参数来指定其他 HTTP 状态代码。

如果状态介于 300 和 399 之间,则应存在 URL 参数。
如果状态不在上述范围之间,则应省略 URL 参数。

使用 RedirectMatch 指令

如果要重定向多个页面,请使用 RedirectMatch 指令。
它允许在重定向标准中包含正则表达式,并提供使用 RewriteRule 的一些好处。

RedirectMatch 指令匹配括号中的模式,并使用“$1”在重定向中设置匹配的文本,其中 1 是第一组文本。
随后的组按顺序给出编号。

如果要将“/blog”目录中的每个请求与名为“blog.new-website.com”的子域匹配,可以使用以下命令:

例子

RedirectMatch 301 /blog(.*) http://www.blog.new-website.com

此命令会将旧的教程 重定向到新的教程 。

与重定向指令一样,我们也可以通过在 URL 位置规则之前添加重定向状态代码来指定重定向类型。

如何使用 Apache 重定向网页

重定向网页的最常见方法是向 Apache Web 服务器上的 .htaccess 文件添加特定规则。
.htaccess 文件是一种允许在每个目录的基础上进行配置更改的方式。
我们需要创建一个 .htaccess 文件或者修改一个已经存在的文件并将其添加到旧的根目录中。

Apache (Apache HTTP Server) 可以使用不同的工具重定向网页。
mod_alias 和 mod_rewrite 模块都可以在 .htaccess 文件中用于重定向。

日期:2020-06-02 22:18:51 来源:oir作者:oir