Zgaduję, że chcesz to zrobić, ponieważ chcemy, aby użytkownicy zobaczyć całkiem wyglądające adresy URL. Jedynym sposobem, aby klient "zmienił" adres URL w pasku adresu, jest wysłanie go do nowej lokalizacji - tzn. Musisz go przekierować.
Czy parametry ciągu zapytania wpłyną na wynik Twojej strony? Jeśli tak, musisz sprawdzić, jak zachować stan między żądaniami (zmiennymi sesyjnymi, plikami cookie itp.), Ponieważ parametry ciągu zapytania zostaną utracone, gdy tylko przekierujesz się na stronę bez nich.
Istnieje kilka sposobów można to zrobić globalnie (w kolejności preferencji):
- Jeśli masz bezpośrednią kontrolę nad swoim środowisku serwera następnie konfigurowalny moduł serwera jak ISAPI_ReWrite lub IIS 7.0 URL Rewrite Module jest doskonałym rozwiązaniem.
- Niestandardowy
IHttpModule
jest ładnym, nadającym się do ponownego użytku podejściem do samodzielnego rolowania.
- Można również zrobić to w
global.asax
jak sugerujesz
Należy używać tylko kod 301
odpowiedzi jeśli zasób rzeczywiście przeniósł się na stałe. Ponownie, zależy to od tego, czy aplikacja musi używać parametrów ciągu zapytania. Jeśli używasz stałego przekierowania przeglądarki (która respektuje kod odpowiedzi 301
), pominie się ładowanie adresu URL, takiego jak .../default.aspx?utm_source = twitter & utm_medium = social-media i załaduj .../default.aspx - nigdy nie dowiesz się o parametrach ciągu zapytań.
Wreszcie, można użyć żądań metody POST
. Zapewnia to czyste adresy URL i pozwala przekazywać parametry, ale działa tylko z elementami lub żądaniami utworzonymi przy użyciu JavaScript.
Idealny! Dziękuję Panu. – Chris
To, co w końcu wymyśliliśmy: // Rozpocznij złe formatowanie string rawUrl = String.Concat (this.GetApplicationUrl(), Request.RawUrl); if (rawUrl.Contains ("/ post /")) { bool hasQueryStrings = Request.QueryString.Keys.Count> 1; if (hasQueryStrings) { Uri uri = new Uri (rawUrl); rawUrl = uri.GetLeftPart (UriPartial.Path); HtmlLink canonical = new HtmlLink(); canonical.Href = rawUrl; canonical.Attributes ["rel"] = "canonical"; Page.Header.Controls.Add (canonical); } } Powoduje funkcję, która prawidłowo pobiera adres URL aplikacji. Działa idealnie. – Chris
eek, nie wiem jak to naprawić :(lol – Chris