如何有选择地重定向?

时间:2010-02-22 22:28:48

标签: html

我有一个域别名,我想转发到我的主站点上的特定目录。 我如何获得它,以便只有访问别名“fakesite.com”的人被重定向到“mainsite.com/fake”而不是每个人都被重定向到那个?

3 个答案:

答案 0 :(得分:1)

如果您正在使用Apache,请将fakesite.com设置为虚拟主机,并在您的fakesite.com上配置.htaccess:

Redirect / http://mainsite.com/fake

答案 1 :(得分:1)

在纯HTML中没有办法完全这一点(如:meta标签或类似的东西)。您可以尝试检查 JavaScript 中的location(检查该位置是否与虚假域相关并重写它,这将重定向浏览器),但是,如果他们重定向客户端已启用JavaScript。

然而如果您使用mod_rewrite拥有Apache,则可以轻松完成此操作。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*\.)?fakesite\.com$ [NC]
RewriteRule ^/(.*)$ http://www.mainsite.com/fake/$1 [L,R=301]

您可以将其放在vhost定义文件(sites- *目录)中。当然,只有当域解析为vhost运行的IP时,它才会起作用。

您还可以进一步自定义此规则(有几个关于如何编写重写规则的好教程),例如:保留浏览器中的虚假URL,而不是发送带有“新”位置的301重定向代码。

如果您在假网站的服务器上有 PHP ,则可以将所有传入请求重写为该脚本上的单个脚本,该脚本将以下标头发送给客户端:

<?php header('Location: http://www.newsite.com/fake'.$_SERVER['REQUEST_URI']); ?>

否则(正如Pekka所指出的) HTML 中的元刷新当然是最后的选择。重新定向到新的根目录而不是新服务器上的请求页面是不好的形式,并且会对访问者数量(混淆的访问者是不愉快的访问者)和Google页面排名做坏事。

如果您正在谈论别名而不是重定向(即提供主站点上目录的内容是为访问虚假站点的用户提供的),您可以简单地创建一个vhost虚假域(与mod_rewrite示例相同的要求适用)并将文档根目录设置为其他域的文档根目录中的目录。如果这两个域位于不同的服务器上,这将无效。

如果您实际上并不拥有主站点或无法访问它,您可以设置一个脚本(例如PHP)来将HTML iframe的源设置为真实URL并且只显示一个包含iframe的页面;或者更清晰的副本:从脚本中的真实服务器读取请求的内容并输出该内容(您必须更正所加载的HTML中的所有URL,但是,如果您想让用户保留在假网站上)

请注意,此类“代理”可能违反其他网站的服务条款(或者他们可能只是禁止您服务器的IP)。

答案 2 :(得分:0)

重写URL总是更好的选择,但是我不明白为什么在fakesite.com的index.html上放置的元重定向不起作用:

<html>
<head>
<title>Add title here</title>
<meta http-equiv="refresh" content="0;url=http://www.mainsite.com/fake">
</head>
<body>
some content
</body>
</html>

这种方法的美妙之处可能存在争议(请务必在页面上配备重定向信息和指向mainsite.com/fake的链接以手动点击),但它应该可以正常工作。