域转发时 URL 中的垃圾字符

Junk characters in URL when domain forwarding

我最近遇到了这个问题,我已将我的域转发到托管在我的 GoDaddy 共享主机上的文件之一。但是,每当我在浏览器中点击域名时,它都会指向相应的文件 (.html ) 以及前面的垃圾字符。

示例:

www.domainname.info

导致:

https://www.mydomainname.in/coffee.html/NjSmZ/KiKgZ/

结果:

Error 404 page not found.

没有更改任何代码;这是一个突然的行为。


更新(更多信息):

NjSmZ/KiKgZ/是link中的垃圾字符。转发是通过 GoDaddy 域转发器本身进行的。转发没有做外部编码。

www.Aitb.in 是转发到 advity.in/adarsha.html 的域。

虽然我不知道 GoDaddy 如何在内部转发其域,但它似乎不是一个简单的 DNS CNAME,因为在当前域的查找中没有显示任何内容。

在玩游戏时,查看转发域的响应,我发现它提供了 301(永久移动)http 响应。响应将所选域替换为新域,并保持 URL 的路径部分不变。

考虑到 domain.a 是转发域,domain.b 是新域,这意味着:

http://domain.a/ => http://domain.b/
http://domain.a/contact.html => http://domain.b/contact.html
http://domain.a/a/long/path/ => http://domain.b/a/long/path/

但在你的情况下,你转发到的不仅仅是一个域...... domain.b 更像是域。[​​=24=].html ,遵循相同的规则,这个意思是:

http://domain.a/ => http://domain.b/coffee.html
http://domain.a/contact.html => http://domain.b/coffee.html/contact.html
http://domain.a/a/long/path/ => http://domain.b/coffee.html/a/long/path/

因此,我的建议是,要么使用更好的着陆点,以便 url_rewrite 将重定向的路径指向正确的路径。或者,如果你不能,你可以尝试添加一个 ?或 # 在 URL 的末尾。这纯粹是猜测,但如果重写没有其他隐藏规则,这将给出类似以下内容,这将发出适当的请求和 "hide" 垃圾部分。

http://domain.a/ => http://domain.b/coffee.html?
http://domain.a/contact.html => http://domain.b/coffee.html?/contact.html
http://domain.a/a/long/path/ => http://domain.b/coffee.html?/a/long/path/

"junk characters" 肯定来自 GoDaddy 而不是原始请求。域转发就是 GoDaddy 所说的使用 301 或 302 重定向(或他们称为 "masking" 的 iframe)重定向 Web 请求的服务。问题是 - 无论出于何种原因,提供重定向服务的 GoDaddy Web 服务器通常会在域后附加一些 "random" 字符(作为子文件夹)。根据我的经验,子文件夹总是直接出现在域之后,并且出现在可能属于原始请求的任何路径之前。所以,正如 Salketer 所说,这只是一个 hack。但 GoDaddy 方面仍然存在问题'

此外,如果您确实使用了 hack 并且在您的网站上使用了 Google 分析,您可能想要添加诸如 ?x= 而不仅仅是 ? 之类的内容。然后您可以在 Analytics 中排除 x 参数,这样您的主页就不会出现一百个不同的 URL。

我在 GoDaddy 控制的几个不同域上都出现了这个问题。我多次尝试联系 GoDaddy 支持以解决问题,但都没有成功。最终我决定自己解决这个问题,因为 GoDaddy 似乎对他们的问题一无所知。

这是我的解决方案: 将此 PHP 代码添加到 404 错误页面的顶部。对于 WordPress,将此添加到您的主题的 404.php 文件中:

<?php 
/* GoDaddy 404 Redirects FIX - by Daniel Chase - https://riseofweb.com */
$currURL = $_SERVER['REQUEST_URI'];
$CheckRedirectError1 = substr($currURL, -6);
$CheckRedirectError2 = substr($currURL, 0, 7);
$CheckRedirectError = false;
if (preg_match("/^[a-zA-Z]{5}\/$/",$CheckRedirectError1)){
    $CheckRedirectError = $CheckRedirectError1;
}else if (preg_match("/^\/[a-zA-Z]{5}\/$/",$CheckRedirectError2)){
    $CheckRedirectError = substr($CheckRedirectError2, 1);
}
if($CheckRedirectError){
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $redirectTo = str_replace($CheckRedirectError, '', $currURL);
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: " . $protocol . $_SERVER['HTTP_HOST'] . $redirectTo);
    exit();
}
?>

脚本检查随机字符并将其删除,然后重定向到正确的页面。您可能需要添加一些例外或修改脚本以满足您的需要。

谢谢,

我最终通过添加“?”解决了这个问题。在域转发结束时 link

示例:mydomain.com/main/foo.html? 要么 示例:mydomain.com/main/foo.html#