2010-01-06 7 views
1

Est-il possible de renvoyer au client Web une page nommée différemment de la page ASP classique d'origine lue dans le dossier des serveurs Web?Comment renvoyer une page ASP classique avec un nom différent de la page ASP sur le serveur

F.i. un exemple réel que je voudrais mettre en œuvre: Disons que j'ai un aspic classique appelé

calendar.asp 

Si cette page est appelée aujourd'hui (6 janvier 2010) la page retournée sur le site Web du client devrait être:

calendar-of-january-6-2010.asp 

Si la même page doit être appelé demain, la returend page sur le site Web du client doit être:

calendar-of-january-7-2010.asp 

Vous obtenez l'image. Sur la base d'une logique interne, renvoyez une page ASP classique nommée spécifique au client Web.

Merci pour toute contribution que vous pourriez fournir.

MISE À JOUR: Les fichiers de date spécifiques dans l'exemple ci-dessus n'existent pas physiquement (ou je pourrais utiliser une redirection). J'espérais trouver quelque chose que j'utiliser pour retourner un fichier csv:

Response.ContentType = "application/vnd.ms-excel" 
Response.AddHeader "Content-Disposition", "attachment; filename=export.csv" 

Pas la même chose, bien sûr, parce que cela permettra l'invite de browswer client pour la sauvegarde/boîte ouverte. Juste quelque chose de similaire.

+0

Ces pages existent-elles réellement ou s'agit-il de pages «virtuelles»? – robertc

+0

Si je me souviens bien, vous devez attraper la requête dans global.asa et réécrire le chemin. Vous devez également faire quelque chose pour avoir des chemins invalides gérés par asp (IIS ne dit pas que le fichier n'est pas trouvé). – ccook

+0

En outre, je pense qu'il peut être préférable d'avoir des pages «virtuelles» traitées par un script ASP avec un nom différent, plutôt que de retourner une page avec un nom différent car le navigateur connaît déjà le nom quand il le demande. Sinon, une redirection est nécessaire. – ccook

Répondre

2

OK, vous avez vu votre modification à propos de la création de liens vers des calendriers quotidiens.

Pensez comme ceci:

  1. Créer vos pages afin que les liens sont des URLs - /calendars/jan-01-2010.asp, /calendars/jan-02-2010.asp, etc.
  2. Configurez IIS pour utiliser une erreur 404 personnalisée pour/calendars/- de sorte qu'à chaque fois qu'un client demande une page qui n'existe pas, votre serveur exécute calendar.asp (au lieu de simplement renvoyer "404 Page Not Found"
  3. C'est tout. Votre client ne verra jamais l'URL "calendar.asp", car il ne la demande jamais. Tout ce qu'ils font est de suivre les liens amicaux que vous leur donnez. Il est votre serveur qui est fait le bit intelligent (attrapant les demandes « invalides », et prétendre qu'il ya en fait une page valide à cette URL)

StackOverflow fonctionne comme ceci - il utilise ASP.NET MVC et le routage ASP.NET moteur pour intercepter ces URLs conviviales, les rechercher dans la base de données et renvoyer une page générée, de sorte que pour les utilisateurs (et les moteurs de recherche), il semble qu'il y ait des milliers de pages nommées amicales, quand tout se passe derrière -les-scènes.

+0

Mais même que, le nom retourné au client n'est pas celui avec la date dedans, non? – Edelcom

+0

@edelcom: Aucun nom n'est retourné au client. Le client spécifie la ressource requise, le serveur envoie la ressource, il ne voit aucun besoin de lui donner un nom puisque le client le sait déjà. La seule façon de demander au serveur de modifier le nom de l'élément demandé est d'utiliser un Response.Redirect qui indique en fait au client "veuillez demander cette ressource à la place". Vos objectifs de faire cela et d'être amical avec les moteurs de recherche semblent être en conflit les uns avec les autres. – AnthonyWJones

+0

Thx Dylan, cela m'a beaucoup aidé. Je n'ai jamais réalisé qu'un nom n'est pas retourné au client. J'ai appris quelque chose aujourd'hui, oui! – Edelcom

0

Vous pouvez écrire un filtre ISAPI personnalisé (C++) pour contrôler le fichier physique mappé à l'URL. Vous avez besoin d'un accès administrateur à la ou aux boîte (s) IIS pour installer ce filtre, et si vous voulez vraiment que vos URL personnalisées comportent l'extension .asp, votre filtre doit accepter cela (puisque les filtres ISAPI sont principalement sélectionnés en fonction de l'extension par IIS) . Vérifiez this et this Lien MSDN. This codeproject sample contient plus de pointeurs (il remappe les fichiers .chm en .asp, facile à suivre).

+0

Je sais que je pourrais écrire un filtre ISAPI (pas que je l'ai fait auparavant, cependant). La question est juste s'il y a un moyen (en tripotant les en-têtes en quelque sorte) qu'en utilisant l'asp classique, cela peut être réalisé. – Edelcom

+0

Pour autant que je sache, c'est la seule façon de réaliser cela dans ASP, puisque le standard asp.dll recherche simplement le fichier basé sur l'URL et signale une demande de page invalide sans toucher le global.asa. – tijmenvdk

+0

@tijmenvdk, ​​je pense que IIS peut être configuré pour envoyer asp toutes les demandes, même mauvaises. Le processus est similaire à l'envoi de nouvelles extensions. Mais ça fait des années que je l'ai fait pour un cms – ccook

0
  1. Vous pouvez simplement rediriger vers la nouvelle page à partir de calendar.asp. Lorsque l'utilisateur demande cette nouvelle page, utilisez la réécriture d'URL pour réécrire en arrière dans calendar.asp. Pas si bon - à la première demande à calendar.asp générer la page réelle (celui avec la date) (ne pas oublier de le supprimer dans les 24 heures) et rediriger vers cette page.

Questions connexes