web-dev-qa-db-fra.com

Le lien hypertexte Excel ne redirige pas correctement (bug?)

J'ai un problème de lien hypertexte Excel: je clique sur, disons A1, copie le lien qu'il contient (http://www.godaddy.com/domains/searchresults.aspx?ci=54814), fais un clic droit sur un lien hypertexte et copie cette URL SAME en tant que lien (s'il n'est pas détecté et modifié automatiquement).

Quand je vais cliquer dessus, je suis redirigé vers http://www.godaddy.com/domains/search.aspx?ci=53972.

Si je copie et colle le lien directement dans le navigateur, cela fonctionne correctement (c’est-à-dire que je ne suis pas redirigé vers une autre URL).

Est-ce que quelqu'un sait ce qui se passe?

29
Andrej

L'URL que vous utilisez nécessite davantage d'informations provenant d'un cookie pour afficher les résultats de la recherche plutôt que la page de recherche. Collez l'URL dans un autre navigateur (ou supprimez vos cookies) et vous obtiendrez les mêmes résultats.

Cliquer sur une URL dans Excel semble l'ouvrir dans votre navigateur par défaut. Mais ce n'est pas vraiment vrai. Avant de l’ouvrir dans votre navigateur, Excel exécute d’abord la découverte du protocole Microsoft Office . Ceci utilise un composant Windows/Internet Explorer pour déterminer si l'URL fonctionne. (Il ne s'identifie pas comme Internet Explorer, mais comme "Agent utilisateur: Découverte de l'existence de Microsoft Office".) Et si les résultats sont (en quelque sorte) corrects, le résultat sera ouvert de cette vérification dans votre navigateur par défaut.

En l'absence des cookies (plus précisément: en l'absence d'une session ), GoDaddy donne à ce composant Internet Explorer une redirection . Et le résultat est ouvert dans votre navigateur par défaut. C'est l'URL que vous voyez.

Votre navigateur par défaut n'est probablement pas Internet Explorer? Ensuite, coller l'URL dans IE directement et cliquer dessus pour obtenir les cookies peut également faire fonctionner le lien depuis Excel. (Juste pour tester; ce n'est pas une solution permanente.)

Vous aurez plus de chance en utilisant une URL qui ne repose pas sur des informations cachées dans un cookie, comme http://www.godaddy.com/domains/search.aspx?domainToCheck=superuser. com

29
Arjan

C'est la faute d'Excel. Si vous collez le lien dans un courrier électronique Outlook ou dans WordPad et que vous ouvrez le lien à partir de là, il fonctionnera correctement.

Excel ne doit jamais créer de session masquée pour vérifier le lien hypertexte. à quoi ça sert. Il suffit de l'ouvrir, rien d'autre. Ils utilisent la même logique dans MS Word. Cela ne fonctionne pas à partir de là non plus. Lorsque Excel tente de vérifier le lien en arrière-plan, une nouvelle session n'est pas authentifiée, elle est donc redirigée vers la page de connexion ou quelque chose du genre. Après cela, au lieu d'ouvrir l'URL d'origine dans le navigateur, Excel ouvre l'URL de redirection. Ils savent vraiment comment faire une chose simple et compliquée.

10
fry

Il s'agit d'un bogue Microsoft connu où les liens hypertexte sont redirigés vers une autre page si:

  • Vous utilisez Microsoft Internet Explorer:
    • avec un serveur proxy
    • tout en utilisant un pare-feu qui n'autorise pas les requêtes HTTP sur votre réseau local
  • Internet Explorer n'est pas votre navigateur par défaut.
  • La clé de registre ForceShellExecute n'est pas présente ou n'est pas définie sur 1

Vous pouvez appliquer le correctif à partir d'ici:

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

7
Kaushik Baruah

C'est vraiment énervant. Une solution de contournement consiste à créer un lien vers un fichier local qui redirige le lien hypertexte. Par exemple, quelque chose comme:

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

Je ne connais pas grand chose au HTML, mais ce serait bien de pouvoir passer un argument (c'est-à-dire l'URL) à ce fichier html local.

1
q335r49

Trop de choses à ajouter ici en tant que commentaire, j'en ai bien peur.

Le lien initial renvoie un code d'état 302

À partir des normes w3c :

La ressource demandée réside temporairement sous un autre URI. Étant donné que la redirection peut être modifiée à l'occasion, le client DEVRAIT continuer à utiliser l'URI de demande pour les futures demandes. Cette réponse ne peut être mise en cache que si elle est indiquée par un champ d'en-tête Cache-Control ou Expires.

L'URI temporaire DEVRAIT être donné par le champ Location dans la réponse. À moins que la méthode de demande ne soit HEAD, l'entité de la réponse DEVRAIT contenir une courte note hypertexte avec un lien hypertexte vers le ou les nouveaux URI.

Si le code d'état 302 est reçu en réponse à une demande autre que GET ou HEAD, l'agent d'utilisateur NE DOIT PAS automatiquement rediriger la demande à moins que l'utilisateur ne puisse le confirmer, car cela pourrait modifier les conditions dans lesquelles la demande a été émise.

  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.

Donc, comme @xlm l'a déclaré, c'est GoDaddy qui effectue une redirection temporaire.

Il semblerait que, lorsqu'il est appelé à partir d'Excel, la redirection n'est pas toujours respectée.

1
Julian Knight

J'ai pu approfondir cette question en essayant de créer un lien entre un classeur Excel et mon propre serveur Web. J'ai remarqué qu'en cliquant sur un lien dans Excel, trois requêtes étaient envoyées au serveur.

  1. GET HEAD (avec session temporaire)
  2. GET (avec session temporaire)
  3. GET (avec une vraie session)

Mais si la page liée redirigeait l'utilisateur, je n'ai pas vu le troisième GET. Au lieu de cela, le second GET a été redirigé vers une nouvelle page et la session est restée temporaire. Ce qui signifie que si la page cible nécessite une authentification, l'utilisateur sera redirigé vers une page de connexion, même s'il est déjà authentifié.

Cela m'a conduit à l'idée de créer une page de destination qui redirige l'utilisateur vers la page cible si l'utilisateur est authentifié. Et il fonctionne. Lorsque le troisième GET est reçu, le serveur notifie que l'utilisateur est authentifié et redirige vers la page cible. Pour les utilisateurs non authentifiés, la page d'arrivée affiche un lien vers la page cible. Et lorsque l'utilisateur clique sur le lien, il sera redirigé vers la page de connexion.

0
Mika

Je peux reproduire votre problème, mais ce n'est pas un problème Excel. En fait, c'est GoDaddy qui vous redirige vers le deuxième lien. Essayez de coller ce lien dans votre navigateur et vous le verrez rediriger vers le second.

Notes: Testé sur Excel 2007, Firefox 13.0.1

0
xlm

J'ai résolu ce problème en effectuant une recherche Google sur l'URL et en utilisant l'URL de la page de résultats Google pour l'hyperlien.

par exemple. pour sweettoothrewards.com j'ai utilisé https://www.google.ca/?gfe_rd=cr&ei=xwK5VY-LG8KC8QeGn4LoDw&gws_rd=ssl#q=+sweettoothrewards.com Dans le navigateur d'opéra avec moi pas connecté.

0
mike s

J'ai eu le même problème que le site que j'allais inclure le traitement et la récupération de la base de données sur un timbre à date. Je copierais l'URL dans une nouvelle cellule. changer la date. Cliquez sur la nouvelle URL, MAIS récupérez l'ancienne.

Cependant, si je clique sur la nouvelle cellule de l'URL, monte dans la fenêtre d'affichage de la cellule, clique sur mon curseur n'importe où dans cette fenêtre, puis clique sur une autre cellule. Les valeurs de date de l'URL changent.

Tout cela dans IE.

Il semble que lorsque vous copiez l'URL, les informations relatives à son site apparaissent. Vous ne savez pas quelle magie se produit lorsque j'ouvre la cellule et que je ne la modifie pas, mais cela change l'URL lorsque vous placez votre pointeur sur celle-ci. Je suis un aimant régulier pour ce genre de choses dans Excel. Probablement pourquoi je n'y crois pas.

0
Dan

J'ai trouvé ce problème surgit lorsque l'URL cible est un site sécurisé nécessitant une connexion. Même si je suis déjà connecté dans une autre fenêtre, cela ne fonctionnera pas correctement. Si je coupe et colle l'URL dans un nouvel onglet ou une nouvelle fenêtre, Chrome est suffisamment intelligent pour constater que je me suis déjà authentifié et que la nouvelle page est correctement ouverte. Toutefois, si je ne suis pas connecté au site, je serai redirigé vers la page de connexion, comme prévu.
Mais lorsque je clique exactement sur la même adresse URL dans Excel, dans les mêmes conditions, la page de connexion n’est affichée que sur mon site distant, ou mon site distant me dit simplement qu’il s’agit d’un navigateur non pris en charge.
Le problème vient clairement d’Excel, car si je prends la feuille de calcul exacte et la sauvegarde au format PDF, les liens hypertexte affichés dans le PDF fonctionnent parfaitement lorsque vous cliquez dessus.
Mis à part la correction de cette "fonctionnalité" évidemment involontaire d’Excel/Office qui tentait de vérifier les liens comme d’autres l'ont postée, la seule solution de contournement que j'ai trouvée consistait à créer une page de redirection locale pouvant prendre mes paramètres uniques dans l'URL et ouvrez une nouvelle fenêtre comme suit (merci aux autres pour le code JavaScript) Redirection en modifiant le lien hypertexte Excel en quelque chose comme http://mylocaldomain.com/redirect.html?ID=12345 , où la page de redirection se trouve sur un serveur local que vous contrôlez et le paramètre 12345 permet de rediriger l'URL vers l'entrée requise. Pour mes SS avec environ 10000 liens, cela fonctionne très bien.

Redirect.html est comme suit.

<!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>
0
JWalter