我正试图在我的经典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 -->
。这似乎证实了它是下游的东西。还有什么想法吗? (上面添加的空格,所以我不超过最大超链接数。)
答案 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.最后一个想法是零宽度空间(​)
介于
response.write "<a href='http://www.exa​"
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 + '&lang=' + langcode;
}
Response.Write(url);
}
writeUrl("fr","not even a url");
%>
这会输出您的期望吗?
如果是,则将绝对URL输入到服务器外的某个地方。如果它仍然可以,那么尝试在服务器上的URL?如果出现问题,请查看是否还有其他可能正在为您重写URL的内容。这是在IIS吗?哪个版本?
也许打开fiddler / firebug或类似的东西,然后查看主机标题以获取线索/提示(远射)。
是否一直发生,或者只有当您在锚标记()中回显输出时才会发生?