web-dev-qa-db-fra.com

La règle de redirection vers un nouveau site nécessite toujours que l'ancien site soit actif

Deux sites Web sont servis sur IIS 7.5 Windows Server 2008, un site (projects.com) ayant récemment été déplacé de sorte qu'il se trouve maintenant sous le deuxième site (mainsite.org). Ce sous-site contient de nombreuses ressources telles que des documents, des fichiers PDF, des fichiers MP3, des fichiers PPTS, etc., vers lesquels de nombreux sites ont des liens et des signets.

On m'a demandé d'écrire une règle de réécriture/redirection de sorte que, lorsqu'un lien de ressource est pointé vers les anciennes URL du sous-site, l'utilisateur soit redirigé vers l'endroit où il se trouve maintenant sur le nouveau site (sans recevoir de 404).

La structure ressemble à ceci:

Anciennes URL pour projects.com:
projects.com/~abc/assets/pdfs
projects.com/~abc/assets/docs

Nouvelles URL pour mainsite.org:
mainsite.org/abc/assets/pdfs
mainsite.org/abc/assets/docs

La règle entrante, qui a été écrite sous projects.com, ressemble à ceci et fonctionne à toutes fins pratiques:

[rule name="ABC resources redirect" stopProcessing="true"]
    [match url="^~abc/assets/(\w+)/(\w+)\.(\w+)" /]
    [action type="Redirect" url="http://mainsite.org/abc/assets/{R:1}/{R:2}.{R:3}" appendQueryString="false" /]
[/rule]

* où {R: 1}/{R: 2}. {R: 3} = {sous-dossier}/{nom du fichier}. {ext}

Maintenant, mon problème est que si le lien vers la ressource est pointé sur l’ancienne URL, la ressource demandée doit continuer à exister sous l’ancien projects.com site ET une copie identique doit également être présente sous le nouveau site. Sinon, une erreur 404 est affichée plutôt qu'une redirection se produisant.

Cela signifie qu'il faut garder la même ressource à deux endroits et ce type de redondance n'est pas bon.

Problème supplémentaire: lorsque je vais directement dans le fichier PDF à: projects.com/~abc/assets/pdfs/anchors.pdf, Je suis correctement redirigé vers: mainsite.org/abc/assets/pdfs/anchors.pdf et le fichier PDF s'ouvre dans le navigateur

Cependant, lorsque je passe à d'autres types de mime: projects.com/~abc/assets/docs/questions.doc OR projects.com/~abc/assets/ppt/grand_opening.ppt, les documents sont automatiquement téléchargés (ou un message "Enregistrer" s'affiche, selon le navigateur que j'utilise). .

Mais après le téléchargement, l'URL dans la barre d'adresse ne reflète pas la redirection, il reste l'ancienne (un peu déroutant), même si les documents sont en cours de téléchargement depuis le site mainsite.org.

J'ai l'impression que mon approche est peut-être imparfaite sur le plan conceptuel. Des suggestions pour résoudre ce problème de redondance?

1
krausdogs

Il semble que votre règle de réécriture IIS soit plus complexe qu’elle ne devrait probablement l'être. Essaye celui-là:

<rule name="ABC resources redirect" enabled="true" stopProcessing="true">
    <match url="^~abc/assets/(.*)" ignoreCase="true" /> 
    <action type="Redirect" url="http://mainsite.org/abc/assets/{R:1}" />
</rule>

Cela devrait permettre de rediriger 301 URL contenant ~abc/assets/(followed by a file with any file extension and case) vers l'URL du nouveau site.

Vous pouvez tester et modifier cela à l'aide de l'outil IIS "Modèle de test" décrit ici: Microsoft IIS.net - Test des modèles de règles de réécriture

Veillez également à vider complètement le cache de votre navigateur entre chaque test.

Si vous avez toujours un problème avec les types de mime, alors je vous suggère de poster une autre question spécifique à ce sujet.

0
dan