1. 犀牛前端部落首页
  2. 资讯杂谈

URL重定向

URL重定向

想要将URL重定向另外一个地址?这篇文章俺向您展示了如何使用多种方式实现重定向

例如:htaccess, PHP, JavaScript, HTML等。

本篇文章,俺将会所有重定向技术进行解释, 并给出示例代码,希望帮助到有需要的朋友。

PHP重定向

PHP中可以使用header函数进行重定向,例如:

<?php 
	header('location: http://example.com/');
	exit;
?>

您所需要做的就是将URL更改为您想要的地址。

请注意,在web页面的开始部分,在任何HTML输出之前包含此函数是很重要的。要了解关于定制此技术的更多信息,请参阅PHP文档

也可以实现过一段时间再重定向:

<?php
	header('Refresh:5; URL=http://example.com/');
	exit;
?>

上面的代码,将会5秒后重定向到example.com。

JavaScript重定向

下面是使用JavaScript实现重定向的简单案例:

<script type="text/javascript">
	document.location.href = 'http://example.com/';
</script>

与上面一样的是,你可以根据你的需要修改URL。

HTML重定向

可以使用普通的旧HTML将用户重定向到新的URL。下面是一个例子:

<meta http-equiv="refresh" content="10; url=http://example.com/" />

这被称为元刷新重定向。您可以通过将10更改为任何必要的时间来调整时间量(以秒为单位)。

请注意,这种重定向技术经常被垃圾邮件发送者和其他不法分子滥用,所以在公共站点上实现时要小心。在这种情况下,建议将刷新间隔保持在8秒以上,以防止任何可能的SEO损失。

Perl重定向

下面是一个使用Perl实现重定向的简单示例:

#!/usr/bin/perl
print "Location: http://example.com\n\n";
exit;

想要更加深入了解Perl重定向,可以参阅这篇文章

ASP(VB脚本)重定向

要使用ASP重定向URL,可以参阅下面的代码:

<%@ Language=VBScript %> 
<% response.status="301 moved permanently" Response.AddHeader "Location", "http://example.com" %>

Apachemod_alias重定向

在Apache服务器上重定向的最简单方法:

Redirect 301 /old-location.html http://example.com/new-location/

该代码可以添加到.htaccess或Apache服务器配置文件中。下面是这项技术的语法:

[Directive] [Status Code] [Old URL] [New URL]

所以你可以根据需要改变这些因素中的任何一个。例如,如果我们需要动态匹配旧的URL,这样所有下面的URL都被重定向:

http://example.com/old-directory/file-01.html
http://example.com/old-directory/file-02.html
http://example.com/old-directory/file-03.html
.
.
.

我们可以使用RedirectMatch来代替重定向:

RedirectMatch 301 /old-directory/file-(.*)\.html http://example.com/new-directory/file-$1.html

同样,我们可以将状态码从301(永久重定向)更改为302(临时重定向)。或根据需要将其更改为任何其他有效状态码。下面是RedirectMatch技术中使用的正则表达式的指南:

  • (.*) -匹配任何字符(或不匹配任何字符)。
  • \.-匹配文字点。
  • $1 -返回第一个(.*)匹配的模式。

使用Apache的mod_rewrite重定向

使用Apache重定向更强大的方法是使用它的rewrite模块mod_rewrite。下面是一些可以添加到.htaccess或Apache配置文件中的示例。

例1:从www重定向到没有www

这个例子将url的www版本重定向到它们的等效的没有www版本。

<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
	RewriteRule (.*) http://example.com/$1 [R=301,L]
</IfModule>

这称为规范化。这里有一些关于这个技术中使用的正则表达式的注意事项:

  • ^ -表示请求URI的开头
  • \。-匹配文字点
  • $ -表示请求的URI的结束
  • [NC] -使模式匹配不区分大小写
  • (.*) -匹配任何字符(或不匹配任何字符)
  • $1 -匹配重写规则中圆括号(.*)中的模式
  • [R=301,L] -发送301“永久”状态码,并指示Apache停止处理规则集

示例2:重定向整个域名

将所有内容从当前域名重定向到新域名:

<IfModule mod_rewrite.c>
	RewriteRule ^/(.*) https://new-domain.tld/$1 [R=301,L]
</IfModule>

同样,重定向所有请求从当前站点的子域到新站点的同一子域:

<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_HOST} (.*)\.old-domain\.tld [NC]
	RewriteRule ^/(.*) https://%1.new-domain.tld/$1 [R=301,L]
</IfModule>

下面是在这些技术中使用正则表达式的一些注意事项:

  • ^ -表示请求URI的开头
  • (.*) -匹配任何字符(或不匹配任何字符)
  • $1 -匹配重写规则中圆括号(.*)中的模式
  • %1 -匹配重写后括号(.*)中的第一个模式
  • [R=301,L] -发送301“永久”状态码,并指示Apache停止处理规则集

请注意,要使这两种技术正常工作,两个域必须具有相同的文件结构。因此,当前域中的任何目录和资源也存在于新域中。否则你会在新域名上得到一堆404“未找到”的错误。

Apache重定向404错误

最后还有一个小技巧,可以将所有404“not Found”错误重定向到一个特定的URL。

ErrorDocument 404 http://example.com/wherever/

原创文章,作者:我心飞翔,如若转载,请注明出处:https://www.pipipi.net/3769.html

发表评论

登录后才能评论