Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
经典ASP(JavaScript)更改要回显的URL字符串_Javascript_String_Asp Classic - Fatal编程技术网

经典ASP(JavaScript)更改要回显的URL字符串

经典ASP(JavaScript)更改要回显的URL字符串,javascript,string,asp-classic,Javascript,String,Asp Classic,我试图在我的经典ASP(JavaScript)页面中回显url。我有一个小函数,可以将一个查询字符串附加到URL并进行回显。我的问题是,我的字符串在输出之前被修改;协议更改为与当前协议(http/https)匹配,子域也更改(www或nothing)。我不想发生这种事 下面是我用来附加查询字符串的函数: function writeUrl(langcode, url) { if(url.indexOf('?')==-1) { url = url + '?lang=

我试图在我的经典ASP(JavaScript)页面中回显url。我有一个小函数,可以将一个查询字符串附加到URL并进行回显。我的问题是,我的字符串在输出之前被修改;协议更改为与当前协议(http/https)匹配,子域也更改(www或nothing)。我不想发生这种事

下面是我用来附加查询字符串的函数:

function writeUrl(langcode, url)
{
    if(url.indexOf('?')==-1)
    {
        url = url + '?lang=' + langcode;
    }
    else
    {
        url = url + '&lang=' + langcode;
    }
    Response.Write(url);
}
很简单,不是吗?此功能包含在相关页面的顶部,如下所示:

<!-- #include virtual="/inc_url.asp" -->
但是,我会得到以下四个值中的任意一个,每个值都与我访问的URL匹配:

Http://example.com/somepage?lang=fr
https://example.com/somepage?lang=fr
http://www.example.com/somepage?lang=fr
https://www.example.com/somepage?lang=fr
有人能指出我遗漏了什么吗?我希望URL在输出时不做任何修改:我希望将其用于rel=canonical

不,在.net中重新编写它是不可能的



新信息-即使是硬编码到html中的URL,即使是在注释中也会发生更改。因此,如果我将
放入html,那么当我从中访问它时,它已被重新编写为
。这似乎证实了它是下游的东西。还有什么想法吗?(上面添加了空格,这样我就不会超过超链接的最大数量)。

如果使用
而不是
来包含它,会怎么样


这意味着应该将其转换为仅JS的脚本文件,因此没有
标记或
标记。

服务器必须运行某种替代ASP(as)或具有某些后处理器或防火墙,以更改输出的位

您可以尝试愚弄系统:

选项1。尝试将url分为两部分编写

 response.write "http://www.exa"
 response.write "mple.com/somepage?lang=fr"
选项2。使用javascript在客户端写入url

response.write "<SCRIPT TYPE='text/javascript'>"
response.write "  document.write('http://www.exa' + 'mple.com/somepage?lang=fr')"
response.write "</SCRIPT>"

在浏览器中工作

您是否尝试过一个简单的页面,该页面除了要测试的内容外,什么都不做:

<%@ Language="javascript" %>
<%

function writeUrl(langcode, url)
{
    if(url.indexOf('?')==-1)
    {
        url = url + '?lang=' + langcode;
    }
    else
    {
        url = url + '&amp;lang=' + langcode;
    }
    Response.Write(url);
}

writeUrl("fr","not even a url");

%>

这会产生你所期望的结果吗

如果是,则在服务器之外的某个地方插入一个绝对URL。如果仍然可以,那么在服务器上尝试一个URL?如果它出错了,那么,看看是否有其他运行的东西可以为您重写URL。这在IIS上吗?哪个版本

可能打开fiddler/firebug或类似的东西,查看主机标题以获得线索/提示(长镜头)


这种情况是否总是发生,或者只有在锚定标记()中回显输出时才会发生?

您是否有一个面向公众的页面,我们可以在其中看到这一点?不幸的是,我在该网站的保密协议下。然而,这正是我上面提到的——如果我去的话,那就是回应的URL,而不是我在代码中指定的URL。不过,你确实给了我一个想法。如果URL与当前URL不相关(如果它是另一个域的URL),那么它将按照预期的方式运行—正如我所希望的那样,而不修改协议或子域。因此,只有当URL可以访问当前页面时,才会发生这种情况。不幸的是,这对我没有帮助…你是在使用负载平衡器,还是在你的web服务器和浏览器之间有其他层?没有任何东西可以修改页面的内容?当您查看源代码时,生成的链接真的是这样吗?报告是什么?正如我在源代码中提到的,它肯定是输出的。至于负载平衡器或其他任何东西,我不知道——我无法控制服务器。我可能也很难找到答案:politics:o(我会尝试一下。你有没有理由认为这会奏效?我还需要一段时间才能尝试。好吧,SSI(服务器端包括)是一种不同于运行服务器端脚本的机制。它也是Microsoft对一个较老竞争对手标准的重新实现。它有自动更正输出URL这样的“怪癖”我不会感到惊讶。但是,这仍然只是一个猜测。好的,谢谢,我会在有机会尝试时反馈。我对此给出了一个建议go,但由于其他依赖关系,无法完全测试。它肯定不是Chili!Soft ASP,但我想可能有一个我不知道的后处理器。我将尝试上面的方法-谢谢。在服务器上分两部分编写事件,URL已更改。我不确定选项2是否对我有帮助。由于URL被拆分,我希望它能使其对客户端来说很粗糙。一旦到了客户端,用脚本编写URL就没有任何帮助,因为我正在尝试添加rel=canonical。如果我在客户端上编写URL,爬行器将不会拾取它。谢谢@Eduardo,我会在可能的时候尝试选项3并报告。这似乎已经奏效了!(选项3)。谢谢大家的帮助。我仍然不知道重新编写URL的原因,但至少有一个解决方案。
response.write "<SCRIPT TYPE='text/javascript'>"
response.write "  document.write('http://www.exa' + 'mple.com/somepage?lang=fr')"
response.write "</SCRIPT>"
 response.write "<a href='http://www.exa&#x200B;"
 response.write "mple.com/somepage?lang=fr'>GO</a>"
<%@ Language="javascript" %>
<%

function writeUrl(langcode, url)
{
    if(url.indexOf('?')==-1)
    {
        url = url + '?lang=' + langcode;
    }
    else
    {
        url = url + '&amp;lang=' + langcode;
    }
    Response.Write(url);
}

writeUrl("fr","not even a url");

%>