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

时间:2011-02-24 20:20:35

标签: javascript string asp-classic

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

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

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" -->

最后,在页面本身中,我调用了该函数。 'lang'属性是一个2个字母的字符串。

<% writeUrl(lang, 'http://www.example.com/somepage'); %>

在访问http://example.com/somepage?lang=fr时,我原本希望上面的代码能够反映这一点:

http://www.example.com/somepage?lang=fr

但是,我得到以下四个值中的任何一个,每个值都与我正在访问的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,即使在评论中也会更改。因此,如果我将<!-- http ://www.example.com/ -->放入html,那么当我从https://example.com访问它时,它已被重写为<!-- https ://example.com -->。这似乎证实了它是下游的东西。还有什么想法吗? (上面添加的空格,所以我不超过最大超链接数。)

3 个答案:

答案 0 :(得分:1)

如果您使用<script runat="server" src="/inc_url.js"></script>代替<!-- #include virtual="/inc_url.asp" -->

,那该怎么办?

这意味着它应该变成一个只有JS的脚本文件,因此没有<% %>标签或<script />标签。

答案 1 :(得分:0)

服务器必须运行一些备用ASP(如Chili!Soft ASP)或者有一些后置处理器或防火墙来改变输出的位。

您可以尝试欺骗系统:

选项1.尝试分两部分编写网址

 response.write "http://www.exa"
 response.write "mple.com/somepage?lang=fr"

选项2.使用javascript

在客户端中写入网址
response.write "<SCRIPT TYPE='text/javascript'>"
response.write "  document.write('http://www.exa' + 'mple.com/somepage?lang=fr')"
response.write "</SCRIPT>"

(您可以逐字写信以获得最大程度的保护)

选项3.最后一个想法是零宽度空间(&#x200B;)介于

之间
 response.write "<a href='http://www.exa&#x200B;"
 response.write "mple.com/somepage?lang=fr'>GO</a>"

在浏览器中使用

答案 2 :(得分:0)

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

<%@ 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或类似的东西,然后查看主机标题以获取线索/提示(远射)。

是否一直发生,或者只有当您在锚标记()中回显输出时才会发生?