web-dev-qa-db-ja.com

Excelハイパーリンクが正しくリダイレ​​クトされない(バグ?)

Excelハイパーリンクに問題があります。たとえば、A1をクリックして、リンクをコピーし(http://www.godaddy.com/domains/searchresults.aspx?ci=54814)、ハイパーリンクを右クリックして、同じURLをリンクとしてコピーします(自動的にリンクされていない場合)検出および変更)。

クリックすると、http://www.godaddy.com/domains/search.aspx?ci=53972にリダイレクトされます。

リンクを直接コピーしてブラウザーに貼り付けると、正常に機能します(つまり、別のURLにリダイレクトされません)。

誰かが何が起こっているのか知っていますか?

35
Andrej

使用しているURLには、検索ページではなく検索結果を表示するために、Cookieからの追加情報が必要です。 URLを別のブラウザーに貼り付け(またはCookieを削除)すると、同じ結果が得られます。

ExcelでURLをクリックすると、デフォルトのブラウザーでURLが開かれるようです。しかし、それは本当ではありません。ブラウザーで開く前に、Excelはまず Microsoft Office Protocol Discovery を実行します。これは、Windows/Internet Explorerコンポーネントを使用して、URLが機能するかどうかを判断します。 (それ自体はInternet Explorerではなく、「ユーザーエージェント:Microsoft Officeの存在の発見」として識別されます。)そして、結果が(どういうわけか)正常であれば、結果が開きます結果デフォルトのブラウザで確認してください。

Cookieが不足している(より正確には a session がない)、GoDaddyはそのInternet Explorerコンポーネント some redirect を提供します。そして、その結果がデフォルトのブラウザーで開かれます。これが表示されているURLです。

ほとんどの場合、デフォルトのブラウザはInternet Explorerではありませんか?次に、URLをIE=に直接貼り付けてクリックし、Cookieを取得すると、Excelからリンクが機能するようになる場合があります(テスト用であり、永続的な解決策ではありません)。

http://www.godaddy.com/domains/search.aspx?domainToCheck=superuser.com のように、Cookieの一部の隠された情報に依存しないURLを使用すると、より幸運になります。

38
Arjan

これはExcelの障害です。 Outlookのメールまたはワードパッドにリンクを貼り付け、そこからリンクを開くと、正しく機能します。

Excelは、ハイパーリンクを確認するために非表示のセッションを作成してはなりません。それのポイントは何ですか。それを開く必要があるだけです。彼らはMS Wordで同じロジックを使用しています。そこからも動作しません。 Excelがバックグラウンドでリンクを確認しようとすると、認証されていない新しいセッションが作成されるため、ログインページなどにリダイレクトされます。その後、ブラウザーで元のURLを開く代わりに、ExcelがリダイレクトURLを開きます。彼らは本当に単純なことを複雑にする方法を知っています。

10
fry

これは、次の場合にハイパーリンクが別のページにリダイレクトされる、Microsoftの既知のバグです。

  • Microsoft Internet Explorerを使用しています:
    • プロキシサーバー
    • ローカルネットワークでHTTPリクエストを許可しないファイアウォールを使用しているとき
  • Internet Explorerはデフォルトのブラウザではありません。
  • ForceShellExecuteレジストリキーが存在しないか、1に設定されていません

ここから修正を適用できます。

http://support.Microsoft.com/kb/21815

10
Kaushik Baruah

それは間違いなく迷惑です。回避策の1つは、ハイパーリンクにリダイレクトするローカルファイルへのリンクを作成することです。たとえば、次のようなものです。

<HTML>
<HEAD>
<TITLE>Redirect</TITLE>
<META HTTP-EQUIV="refresh" CONTENT="0;URL=http://www.google.com">
</HEAD>
<BODY>
Redirecting...
</BODY>
</HTML>

HTMLについてはあまり知りませんが、このローカルhtmlファイルに引数(つまり、URL)を渡すことができるといいですね。

1
q335r49

この問題は、ターゲットURLがログインを必要とする安全なサイトである場合に発生します。すでに別のウィンドウでログインしていますが、正常に動作しません。 URLを切り取って新しいタブまたはウィンドウに貼り付けると、Chromeは十分に賢いので、認証済みで新しいページが適切に開きます。ただし、ログインしていない場合予想通り、サイトにログインページにリダイレクトされます。
しかし、Excelでまったく同じURLをクリックして同じ条件でクリックすると、ログインページしか表示されないか、リモートサイトにサポートされていないブラウザであると表示されます。
問題は明らかにExcelにあります。正確なスプレッドシートをPDFとして保存すると、PDFに表示されるハイパーリンクをクリックしても完全に機能するためです。
他のユーザーが投稿したリンクを検証しようとする、Excel/Officeの明らかに意図しない「機能」を修正する以外に、私が見つけた唯一の回避策は、URL内の独自のパラメーターを取得できるローカルリダイレクトページを作成することでした。次のように新しいウィンドウを開きます(JavaScriptコードを他の人に感謝します)Excelのハイパーリンクを http://mylocaldomain.com/redirect.html?ID=12345 のように変更してリダイレクトします。ページは、ユーザーが制御するローカルサーバー上にあり、パラメータ12345は、必要な特定のエントリへのURLリダイレクトを行います。約10000のリンクを持つ私のSSの場合、これは問題なく機能します。

Redirect.htmlは次のとおりです。

<!DOCTYPE html>
<html>
<script>
function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }
    document.getElementById("demo").innerHTML=getUrlVars()["type"];
    var varbaseurl=[put your base url here]
    window.location = varbaseURL  + getUrlVars()["type"]
</script>
<body> 
redirecting to: <p id=demo></p>
1
JWalter

ここにコメントとして追加するには多すぎます。

最初のリンクは302ステータスコードを返します

w3c標準 から:

リクエストされたリソースは一時的に別のURIに存在します。リダイレクトは時々変更される可能性があるため、クライアントは今後のリクエストに引き続きRequest-URIを使用する必要があります(SHOULD)。この応答は、Cache-ControlまたはExpiresヘッダーフィールドで示されている場合にのみキャッシュ可能です。

一時URIは、応答のLocationフィールドで指定する必要があります(SHOULD)。リクエストメソッドがHEADでない限り、レスポンスのエンティティには、新しいURIへのハイパーリンクを含む短いハイパーテキストノートを含める必要があります(SHOULD)。

GETまたはHEAD以外のリクエストに応答して302ステータスコードを受信した場合、ユーザーエージェントは、ユーザーが確認できない限り、リクエストを自動的にリダイレクトしてはなりません。これにより、リクエストが発行された条件が変わる可能性があります。

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.

@xlmが述べたように、これは一時的なリダイレクトを行うGoDaddyです。

Excelから呼び出された場合、リダイレクトが常に有効であるとは限りません。

1
Julian Knight

私は自分のWebサーバーにリンクするExcelワークブックを取得しようとしていたため、これをさらに調査することができました。 Excelのリンクをクリックすると、サーバーに対して3つのクエリが生成されることに気付きました。

  1. GET HEAD(一時セッションあり)
  2. GET(一時セッションあり)
  3. GET(実際のセッションで)

しかし、リンクされたページがユーザーをリダイレクトしている場合、3番目のGETは表示されませんでした。代わりに、2番目のGETが新しいページにリダイレクトされ、セッションは一時的なままでした。つまり、ターゲットページが認証を必要とする場合、実際に認証されていても、ユーザーはログインページにリダイレクトされます。

これにより、ユーザーが認証された場合にユーザーをターゲットページにリダイレクトするランディングページを作成することができました。そしてそれは機能します。 3番目のGETを受信すると、サーバーはユーザーが認証されたことを通知し、ターゲットページにリダイレクトします。認証されていないユーザーの場合、ランディングページにはターゲットページへのリンクが表示されます。ユーザーがリンクをクリックすると、ユーザーはサインインページにリダイレクトされます。

0
Mika

あなたの問題を再現できますが、Excelの問題ではありません。 2番目のリンクにリダイレクトしているのは、実際にはGodaddyです。そのリンクをブラウザーに貼り付けてみると、2番目のリンクにリダイレクトされます。

注:Excel 2007、Firefox 13.0.1でテスト済み

0
xlm

URLでGoogle検索を実行し、ハイパーリンクにGoogle結果ページのURLを使用してこれを解決しました

例えば使用したsweettoothrewards.com https://www.google.ca/?gfe_rd=cr&ei=xwK5VY-LG8KC8QeGn4LoDw&gws_rd=ssl#q=+sweettoothrewards.com In opera =サインインしていないブラウザ。

0
mike s

日付スタンプに基づいてデータベースの処理と取得を行う予定のサイトだけに同じ問題が発生しました。 URLを新しいセルにコピーします。日付を変更します。新しいURLをクリックすると、古いURLが取得されます。

ただし、新しいURLセルをクリックしてctlをクリックした場合は、セル表示ウィンドウに移動し、そのウィンドウ内の任意の場所でカーソルをクリックしてから、URLの日付値が変化する別のセルをクリックし、URLをクリックすると、正しいデータが表示されます。

これはすべてIEで。

URLをコピーすると、URLサイト情報が一緒に表示されるようです。セルを開いて変更しないとどのような魔法が発生するのかはわかりませんが、ポインタを置くとURLが変更されます。私はこの種のExcelの常連の磁石です。おそらく私はそれを信用しないのでしょう。

0
Dan