重定向网站,但在地址栏中保留原始网址

Posted

技术标签:

【中文标题】重定向网站,但在地址栏中保留原始网址【英文标题】:Redirect website but keep the original url in the address bar 【发布时间】:2017-05-09 22:06:48 【问题描述】:

我有一个本地域名 .dz,它不允许 DNS 更改,我想将域和所有页面重定向到另一个域 。 com,并将.dz地址保留在地址栏中,完全隐藏.com域。

我已经搜索了整个互联网所有解决方案都没有这样做,有些会重定向到 .com 并且 .com 会显示在地址栏中,而有些则只重定向主页。

我想知道这是否是一个 php 函数,可以直接从 .com 域读取,然后将内容写入 .dz 域

我可以访问 .htaccess 或 PHP 文件。

【问题讨论】:

您在寻找pointing-two-urls-to-the-same-website 或Setup Multiple Domains Pointing to the Same Directory 正如我询问和强调的那样,我无法更改 DNS 区域,因此我无法停放我的域! 您有权访问服务器配置吗?或者只是.htaccess @w3dk .dz => htaccess /////// .com => 一切 【参考方案1】:

我假设您可以访问httpd.confconf 目录,

在您的httpd.conf 中提到 mod_proxy 的部分尝试此操作。

ProxyPass / http://yourwebsite.com/ smax=0 ttl=60 retry=5
ProxyPassReverse / http://yourwebsite.com/ smax=0 ttl=60 retry=5

如果您必须将上述规则放在名为 httpd-ajp.conf 的单独 conf 文件中,您会在 conf/extra 目录中找到它。

完成后,您必须在尝试检查之前重新启动服务器。

编辑

正如您所说,您无权访问conf 目录,您可以在.htaccess 中尝试以下规则

RewriteEngine On
RewriteRule ^(.*)$ http://domain.com/$1 [P]

但您必须确保 mod_proxy 已启用,如果您可以向您的托管服务提供商询问,这些行必须在 httpd.conf 中取消注释。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

【讨论】:

我无权访问 .dz 域中的 httpd.conf【参考方案2】:

.htaccess 中尝试使用代理:

RewriteEngine  on
RewriteRule ^ http://domain.com%REQUEST_URI [NE,P]

如果网站很简单,这可能对您来说已经足够了。

【讨论】:

我刚试了两台服务器,效果很好。 (但是,它不适用于 https 的代理)。在您的情况下,我认为目标服务器正在阻塞或重定向。 @Séddik 你说的“没用”是什么意思?有什么错误吗? mod_proxymod_proxy_http 都需要在您的源服务器上启用(即example.dz)。 (旁白:这里不需要L标志,P暗示L。) .com网站显示在地址栏中,尝试了多个浏览器并清除了应用程序缓存并尝试了隐身和隐私模式,没有运气 @Séddik 您是否正在代理 canonical 域?您的.com 域中是否有任何规范的重定向? IE。如果您代理到example.com 并且您的.com 站点具有到www.example.com 的规范重定向,那么这将是您的重定向。 (?)【参考方案3】:

事实上,Web 应用程序应该托管在 .dz 域中,您应该将 .com 永久重定向到 dz。 无论您做什么除了在 dz 域中更改 DNS 之外,这将是对 .com 的请求,而不是对自身(dz 域名)的请求。

我的意思是没有办法,除非您想映射所有 url 并为每个请求制作一个 curl 到 .com 并更改 DOM 文件并打印它。或使用 Iframe,这意味着您也应该保留 .com 域。

【讨论】:

反之,我的应用程序托管在 .com 上,我想将其重定向到 => .dz,并用于 iFrame解决方案对 SEO 友好吗??!! 正如您所说的“在地址栏中保留 .dz 地址”,您应该 1) 在 dz 中托管应用程序并将 com 重定向到它 [301 重定向]。或 2) 将应用程序保留在 com 中并将 .dz dns 更改为 .com ip 并使用 com 中的域别名进行处理。关于 iframe 和 seo。当然不。即使保留两个站点也不是一个好的解决方案,因为一个是另一个的副本。你应该使用 301 重定向 如果我在 .dz 上托管我的应用程序,我将不需要 .com,因为 .dz 太慢且不允许更改 DNS,这就是我保留 .com 的原因我想将“慢速主机”.dz 重定向到“快速主机”.com 有两种方法可以将域绑定到另一个主机:域所有者可以随时通过更改域 ns 名称(ns1 和 ns2 和...)来更改它,并将其绑定为停放或别名域在其他主机中 - 或者如果它绑定到具有 dns 管理的主机,您可以在主机上创建 A 记录并将其作为停放或别名域再次添加到其他主机。就是这样。 在我的问题中很明显我没有办法,请先阅读我的问题!【参考方案4】:

有一种方法,只要它们是分开托管的,但是,您的 .com 将需要运行和工作。

这与原始 Facebook 应用系统相同,任何发送到其 URL 然后读取并呈现输出的内容。无论是 GET、POST 还是标头

基本上,它是一个 PHP 脚本代理,不会更改或添加任何东西到它所代理的服务的输出

<?php 
$protocol = "http";
$domain = "domain.com";

$ch = curl_init();

$requestPath = $_SERVER['REQUEST_URI'];
$queryString = http_build_query($_GET);

curl_setopt($ch,CURLOPT_URL, $protocol.'://'.$domain.$requestPath);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

$mode = $_SERVER['REQUEST_METHOD'];
$headers = getallheaders();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

if ($mode == 'POST')
    curl_setopt($ch,CURLOPT_POST, count(http_build_query($_POST)));
    curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($_POST));


$response = curl_exec($ch);

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);

$headers = explode("\r\n", $header);
unset($headers[0]);
echo "<pre>";
foreach($headers as $val)
    if(strpos($val, "Transfer-Encoding") === false)
        header("$val");
        flush(); 
    

echo "</pre>";
//close connection
curl_close($ch);
echo $body;
?> 

带有重写文件

RewriteEngine On
RewriteRule .* index.php [L]

如果您将其托管在您的 .dz 域上,它将指向您的 .com,而无需更改域名。

【讨论】:

...这似乎喜欢它可能是一个有用的方法,但一点更多信息会很好。这是如何使用的?我会使用both PHP 代码 将另一部分放入.htaccess 吗?代码在做什么到底是什么? (另外,请查看How to Answer。) @ashleedawg 请去阅读如何回答那里没有任何地方说解释你的代码,并且阅读代码没有人应该使用他们无法阅读和理解的代码,因为那样你就不会'不知道它在做什么。【参考方案5】:

此代码将帮助您重定向并保留 URL 之后的所有内容。

RewriteCond %HTTP_HOST ^domainname.com    

RewriteRule ^(.*) http://domainname.com/$1 [P]

【讨论】:

【参考方案6】:

您已经提到 - '.dz 太慢并且不允许更改 DNS,这就是为什么我保留了一个 .com 并且我想将“慢速托管”.dz 重定向到“快速主机” .com'..

当 .dz 域太慢时,不值得将时间花在整个 Web 流量的重定向上。它会让事情变得更慢。

您可以在慢速托管 .dz 域中放置重定向 html(如元刷新),并直接从 .com 域为用户提供服务。将“慢速托管”.dz 域作为您的主站点对您毫无益处...

【讨论】:

【参考方案7】:

要显示来自 DomainB 的内容但显示 DomainA url,有 2 个选项:

1.公园域

如果 DomainB 是您的 primary domain name,只需将 DomainA 添加为 Parked Domain。

2。使用 .htaccess 文件重定向

这个方法是:重定向并保留URL后面的所有内容

第一个选项将在一个 URL 上显示与另一个 URL 相同的所有内容。 为此,您需要修改用户将访问的域的 .htaccess 文件,并插入以下代码行:

RewriteCond %HTTP_HOST ^DomainA.com
RewriteRule ^(.*) http://DomainB.com/$1 [P] 

如果您使用的是file manager in cPanel,请确保您可以选择显示已选择的隐藏文件。

【讨论】:

【参考方案8】:

@Séddik,请在您的 .htaccess 文件中尝试这样的操作

RewriteCond %HTTP_HOST ^www.your-local-domain.dz


RewriteRule ^(.*) http://www.your-another-domain.com/$1 [P]

这可能对您有所帮助!

【讨论】:

请提供文档

以上是关于重定向网站,但在地址栏中保留原始网址的主要内容,如果未能解决你的问题,请参考以下文章

Laravel永久重定向

实施 HTTP 到 HTTPS 重定向,保留 Google Analytics(分析)引荐来源网址

如何获取网站重定向目标网址(最终用户链接)

在Chrome中,最终使用带有正则表达式的重定向扩展程序,如何将所有facebook.com网址重定向到mbasic.facebook.com URLS

django重定向导致重定向到下一页,但然后返回原始?

htaccess 重定向到新页面但保留“get”参数