2011-02-24 78 views
0

我想在我的經典ASP(JavaScript)頁面中回顯一個URL。我有一個小函數來追加一個查詢字符串到URL並回顯它。我的問題是我的字符串在輸出之前被修改;該協議更改爲匹配當前協議(http/https)並且子域也更改(www或無)。我不希望發生這種情況。經典ASP(JavaScript)更改正在響應的URL字符串

這裏是我的功能,我使用追加查詢字符串:

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

你有面向公衆的頁面,我們可以看到這個頁面嗎? – Martijn

+0

不幸的是,我在這個網站的保密協議下。但是,正如我上面提到的那樣 - 如果我轉到https://example.com/somepage?lang=fr,那麼這是回顯的URL,而不是我在代碼中指定的那個。 – JasonC

+0

雖然你確實給了我一個主意。如果URL與當前URL(如果它是針對另一個域)無關,那麼它的行爲如預期的那樣 - 無需修改協議或子域名即可。所以只有當URL可以訪問當前頁面時纔會發生。不幸的是,這對我沒有幫助... – JasonC

回答

0

服務器必須運行一些替代ASP(如Chili!Soft ASP)或者有一些後處理器或防火牆來改變輸出位。

您可以嘗試騙過系統:

選項1.儘量在兩個部分

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

(您可以逐字寫信以獲得最大保護)

選項3。最後一個想法在作品在瀏覽器之間

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

零寬度空間(&#x200B;)

+0

如果沒有別的,這是一個調試它的好主意。 –

+0

這不是辣椒!軟ASP,但我想可能有一個我不知道的後處理器。我會嘗試以上 - 謝謝。 – JasonC

+0

事件在服務器上寫入2個部分,URL被更改。 – JasonC

1

如果使用<script runat="server" src="/inc_url.js"></script>而不是<!-- #include virtual="/inc_url.asp" -->包含它,該怎麼辦?

這意味着它應該變成JS-only腳本文件,所以沒有<% %>標籤或<script />標籤。

+0

我會試試看,有沒有理由認爲這會起作用?這個。 – JasonC

+0

那麼,SSI(服務器端包含)與運行服務器端腳本的機制是不同的。這也是微軟重新實施的一個老對手的標準。我不會感到驚訝的是,它具有自動糾正輸出URL等「怪癖」。但是,這只是一個猜測。 – Martijn

+0

好的,謝謝,當我有機會嘗試時,我會反饋。 – JasonC

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?如果出現問題,請查看是否有其他可以爲您重寫網址的內容。這是在IIS上嗎?哪個版本?

也許打開提琴手/螢火蟲或類似的東西,看線索/提示(長鏡頭)的主機標題。

這是否總是發生,或者只有當你在一個錨標籤()中回顯輸出?