2008-11-03 7 views
3

J'utilise http://urlrewriter.net/ pour réécrire des URL sur mon site web. Par exemple, je réécriture:Comment déterminer si une URL asp.net a été "réécrite"?

http://www.example.com/schedule.aspx?state=ca

à

http://www.example.com/california.aspx

Ce que je suis en train de faire (à des fins de SEO) pour dynamiquement ajoutez la balise meta:

<meta name="robots" content="noindex,follow" /> 

seulement à la page qui n'a pas été réécrite. C'est parce que je veux que les deux URL fonctionnent, mais seulement l'URL réécrite doit être indexée par les moteurs de recherche.

Comment puis-je déterminer quelle version de la page a été demandée?

EDIT

Les réponses ci-dessous suggèrent une redirection 301 au lieu d'utiliser une balise meta. Peut-être que je vais le faire, mais je veux toujours savoir la réponse à la question sous-jacente ... comment puis-je savoir si la page a été réécrite?

Répondre

2

personnellement, je redirection 301 de l'ONU réécrites un à l'un réécrite, et utiliser uniquement la copie unique de la page. C'est plus facile pour les utilisateurs, et d'un point de vue SEO, vous avez 1 copie du contenu.

+0

C'est certainement une option, mais je veux aussi explorer l'option nofollow. – Keltex

+0

Aussi, assurez-vous de garder à l'esprit que si la page non écrite a un rang de page, l'utilisation de ne pas suivre perdra ce rang de page et cachera la page. Si vous utilisez 301, il sera transféré. –

+0

C'est un bon point. Je pense que ma question est toujours pertinente. Comment puis-je déterminer si la demande concerne la page réécrite? Si non réécrit alors je 301. – Keltex

2

Si vous devez faire, vous pouvez probablement faire quelque chose comme:

<add header="X-WasRewritten" value="true" /> 

Et vous pouvez vérifier l'en-tête dans votre vue et ajoutez les robots balise meta si vous en avez besoin.

Cela sera retourné au client aussi, donc si vous voulez cacher que vous pouvez écrire un CustomAction (http://urlrewriter.net/index.php/support/reference/actions/custom-action) qui définira une sorte de valeur d'état dans votre demande.

Cependant, avoir deux adresses URI pour la même ressource est quelque chose que je ne recommanderais pas. Je vous suggère de garder la seule représentation. Si vous craignez d'invalider les anciens favoris, vous pouvez définir l'ancien pour rediriger vers le nouveau.

1

La méthode la plus évidente consiste à utiliser l'objet Request.Url dans votre page pour obtenir des informations sur l'URL et la chaîne de requête. Par exemple:

if (Path.GetFileName(Request.Url.FilePath) == "schedule.aspx") 
    //Not rewritten 
else 
    //rewritten 
+0

Je ne sais pas si cela va fonctionner avec urlrewriting.net, comme la ré-écriture traduit l'url de retour au format normal pour l'application à utiliser. –

0

Je pense que c'est le travail de HttpContext.Current.Items.

Vous pouvez enregistrer la "Redirection" dans HttpContext.Current.Items et ensuite dans vos pages, vous pouvez le vérifier pour une certaine valeur ajoutée.

Je crois que vous pouvez ajouter des crochets à urlrewriter.net qui pourrait le faire, quelque chose alongs:

HttpContext.Current.Items["Redirected_From"] = currentUrlHere; 

Et puis dans vos pages web, vous pouvez le vérifier par:

if (!string.IsNullOrEmpty(HttpContext.Current.Items["Redirected_From"])) 
    // the page's been redirected, do something! 
else 
    // no it's visited normally. 

J'ai depuis longtemps quitté pour le cadre de routage ASP.NET dans. NET 3.5 SP1, c'est mieux que urlrewriter.net IMO.

2

Suite à la réponse de chakrit, il ressemble à UrlRewriter.NET stocke l'URL d'origine dans le HttpContext, dans une clé appelée UrlRewriter.NET.RawUrl. Donc, vous pouvez essayer quelque chose comme:

bool isPageRewritten = 
    !string.IsNullOrEmpty(HttpContext.Current.Items["UrlRewriter.NET.RawUrl"]); 
Questions connexes