none
Redirect in Abhängigkeit der eingestellten Browser-Landessprache RRS feed

  • Frage

  • hallo

    ich bin auf der suche nach einer lösung für folgendes problem:

    ich habe eine zweisprachige asp.net 2.0 webpage mit localization inkl. resource-files (FR und DE inhalt) implementiert.
    alle meine aspx - seiten liegen in einem ordner. doch ich hätte gern das die suchmaschinen die texte beider sprachen erfassen.

    um das problem zu beheben verwende ich urlrewriting und habe die Intelligencia.UrlRewriter.dll von www.urlrewritingnet.com Externer Link in mein projekt hinzugefügt.
    danach habe ich  folgendes rule in meiner web.config Datei angeben, damit der FR-Inhalt für die Suchmaschinen sichtbar wird.

    </ rewrite name ="rule1" url ="^/(.*)/(.*)/fr/(.*).aspx" to ="/$1/$2/$3.aspx" >

    das ermöglich mir jetzt folgenden direkten aufruf:
    www.mypage.com/folder1/folder2/fr/default.aspx Externer Link

    der anschliessend wie folgt umgeschrieben wird:
    www.mypage.com/folder1/folder2/default.aspx Externer Link

    reicht das um meinen FR-Inhalt für die Suchmaschinen sichtbar zu machen ?

    und...

    wie kann ich die url in Äbhängigkeit der Browser-landessprache wie folgt umschreiben bzw. weiterleiten ?
    von  www.mypage.com Externer Link
    nach www.mypage.com/folder1/folder2/fr/default.aspx Externer  Link ,

    über jegliche hilfe wäre ich sehr dankbar
    Freitag, 19. Februar 2010 09:34

Antworten

  • Was heißt nicht existiert? Natürlich existiert die URL , sie liefert ja auch einen Inhalt wieder. Suchmaschinen wissen darüber genauso wie über jede andere URL Bescheid: in dem sie einem Link dorthin folgen, oder in dem du sie manuell anmeldest.

    Sinnvollerweise solltest du also irgendwo vom Root / erreichbar Links zu allen Sprachversionen platzieren, und die Sprachauswahl also z.B. nicht (nur) über eine DropDown-Liste realisieren. Das kann eine sprachübergreifende Sitemap oder einfach eine Liste aller Sprachversionen im Footer jeder Seite sein. Oder du verlinkst die Sprachen einfach über entsprechende Icons o.ä.
    • Als Antwort markiert tronix01 Freitag, 26. Februar 2010 11:06
    Montag, 22. Februar 2010 08:23
  • Du kannst in der Global.asax bei jedem Request prüfen, ob die Sprache angegeben ist, und wenn nicht einfach weiterleiten.

    void Application_BeginRequest(object sender, EventArgs e)
    {
    }

    Aber es fragt sich, ob das nicht ein eher theoretisches Problem ist - denn wenn du überall die Links richtig setzt, sollte der Fall gar nicht auftreten (es sei denn jemand manipuliert von Hand die URL, aber entsprechende Fehler musst du sowieso behandeln).
    • Als Antwort markiert tronix01 Freitag, 26. Februar 2010 11:06
    Donnerstag, 25. Februar 2010 14:22
  • Du kannst natürlich nicht bei jedem einzelnen Aufruf in BeginRequest einen Redirect machen, sondern musst schon auf die entsprechenden Bedingungen prüfen. Ist die Sprache in der URL angegeben, mache nichts bzw. verarbeite den Request ganz normal, wenn nicht, leite weiter.

    Wozu die index.html? Die Weiterleitung machst du dann wie, per Meta-Refresh? Warum?
    • Als Antwort markiert tronix01 Freitag, 26. Februar 2010 12:13
    Freitag, 26. Februar 2010 08:21

Alle Antworten

  • Erste Frage: ja, das reicht. Die URL muss je Sprache differenziert werden, das ist gegeben.
    Zweite Frage: im Demoweb von UrlRewritingNet findest du eine Demo, wie du das machen kannst.
    Freitag, 19. Februar 2010 11:02
  • Hallo Thomas,

    danke für deine Antwort.

    Jedoch ist mir eines immernoch unklar. Wie können die Crawler der Suchmachinen wissen das sie
    www.mypage.com/folder1/folder2/FR/default.aspx aufrufen müssen bzw. darin nachschauen müssen wenn das verzeichnis FR garnicht existiert ?

    Ich Danke Dir schon mal
    Montag, 22. Februar 2010 08:15
  • Was heißt nicht existiert? Natürlich existiert die URL , sie liefert ja auch einen Inhalt wieder. Suchmaschinen wissen darüber genauso wie über jede andere URL Bescheid: in dem sie einem Link dorthin folgen, oder in dem du sie manuell anmeldest.

    Sinnvollerweise solltest du also irgendwo vom Root / erreichbar Links zu allen Sprachversionen platzieren, und die Sprachauswahl also z.B. nicht (nur) über eine DropDown-Liste realisieren. Das kann eine sprachübergreifende Sitemap oder einfach eine Liste aller Sprachversionen im Footer jeder Seite sein. Oder du verlinkst die Sprachen einfach über entsprechende Icons o.ä.
    • Als Antwort markiert tronix01 Freitag, 26. Februar 2010 11:06
    Montag, 22. Februar 2010 08:23
  • Danke für deine Antwort.

    Stimmt natürlich, in der URL existiert FR, das ist auch was die Crawler in erster Linie interessiert

    Die Platzierung der verschiedenen Sprachversionen habe ich mit einer Masterpage mit ImageButton gelöst.
    Somit kann auf die verschiedenen Sprachversionen immer zugregriffen werden.

    Das sollte ausreichend sein oder hast du noch Vorschläge für eine Optimierung ?

    Ich danke Dir.



    Montag, 22. Februar 2010 08:49
  • Die ImageButtons generieren keine echten Hyperlinks, sondern ein JavaScript, welches einen Postback feuert (serverseitig wirst du dann im Eventhandler vermutlich einen Response.Redirect() auf die Sprache machen). Das ist für Suchmaschinen schlecht, da die das nicht ausführen können. Also besser echte Links verwenden:

    <a href="/fr/default.aspx"><img src="fr.png" alt="Französisch" /></a>
    Montag, 22. Februar 2010 10:13
  • hallo thomas

    das war sehr hilfreich. danke für den tipp.

    ich habe mir das sampleweb von urlrewritingnet heruntergeladen und angeschaut.
    leider habe bisher ich folgendes rewriting noch nicht  hinbekommen:

    von  www.mypage.com Externer Link
    nach www.mypage.com/folder1/folder2/fr/default.aspx Externer  Link ,


    wie kann ich die url in Äbhängigkeit der Browser-landessprache umschreiben bzw. weiterleiten ?

    danke
    gruss
    Mittwoch, 24. Februar 2010 14:06
  • Stimmt, im Sample-Web ist da gar keine Lösung drin, hatte ich falsch in Erinnerung (ist auch schon wieder 4 Jahre her).

    Du solltest Folgendes machen:

    Wenn die Sprache nicht als Parameter angegeben ist, und nur dann, prüfst du ob die Browser-Sprache (Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"]) in den Sprachen, die du anbietest, verfügbar ist - wenn ja, leitest du auf diese weiter, wenn nicht leitest du zur Default-Sprache.

    Die URL für die Weiterleitung musst du natürlich selbst erstellen, aber das musst du ja an allen anderen Stellen auch tun.

    (Ich würde die Sprache übrigens immer als ersten Parameter setzen, www.domain.de/de/home usw.)
    Donnerstag, 25. Februar 2010 10:13
  • hallo thomas

    auch das war sehr hilfreich. danke.

    das weiterleiten klappt insofern ich als erstes z.b. eine default.aspx aufrufe, darin die browsersprache auslese, ggf. die url anpasse und dann mit der angepassten url den redirect z.b. zur home.aspx mache.

    nur wie und wo kann ich, in abhängigkeit der browsersprache, die url umschreiben wenn ich direkt die home.aspx aufrufe ?
    z.b. www.mypage.com/home.aspx
    zu www.mypage.com/fr/home.aspx

    ein redirect in der home.aspx auf sich selbst würde ja keinen sinn machen.

    hast du dazu ncoh einen tipp ?

    ich danke dir erneut
    gruss



    Donnerstag, 25. Februar 2010 11:32
  • Du kannst in der Global.asax bei jedem Request prüfen, ob die Sprache angegeben ist, und wenn nicht einfach weiterleiten.

    void Application_BeginRequest(object sender, EventArgs e)
    {
    }

    Aber es fragt sich, ob das nicht ein eher theoretisches Problem ist - denn wenn du überall die Links richtig setzt, sollte der Fall gar nicht auftreten (es sei denn jemand manipuliert von Hand die URL, aber entsprechende Fehler musst du sowieso behandeln).
    • Als Antwort markiert tronix01 Freitag, 26. Februar 2010 11:06
    Donnerstag, 25. Februar 2010 14:22
  • hallo thomas

    das habe ich schon probiert. nur ist es eben so wenn cih in der Application_BeginRequest Methode ein redirect mache wird immer wieder die Application_BeginRequest aufgerufen --> Endlosschleife sozusagen.

    ich hatte es hier auch mit einem Context.RewriteUrl probiert. leider erfolglos. da passiert garnix.

    warum ich das überhaubt so haben möchte ?
    naja eigentlich habe ich eine einfache index.html datei die dann den redirect auf die z.b. home.aspx macht.

    was meinst du dazu ?

    danke für deine unterstützung

    gruss
    Freitag, 26. Februar 2010 08:11
  • Du kannst natürlich nicht bei jedem einzelnen Aufruf in BeginRequest einen Redirect machen, sondern musst schon auf die entsprechenden Bedingungen prüfen. Ist die Sprache in der URL angegeben, mache nichts bzw. verarbeite den Request ganz normal, wenn nicht, leite weiter.

    Wozu die index.html? Die Weiterleitung machst du dann wie, per Meta-Refresh? Warum?
    • Als Antwort markiert tronix01 Freitag, 26. Februar 2010 12:13
    Freitag, 26. Februar 2010 08:21
  • danke thomas

    jetzt läuft alles wie es sein soll. wunderbar :-)

    die index.html ist historisch bedingt mit dabei.
    ja, darin wird ein meta-refresh gemacht.

    gruss
    lutz
    • Als Antwort markiert tronix01 Freitag, 26. Februar 2010 11:06
    • Tag als Antwort aufgehoben tronix01 Freitag, 26. Februar 2010 11:06
    Freitag, 26. Februar 2010 09:34
  • Anstatt des Meta-Refresh würde ich die index.html ganz wegwerfen und per URL-Rewrite "simulieren" und einen 301-Redirect auf die tatsächliche Index-Datei machen. Irgendwann kann man das dann ganz rausnehmen.
    Freitag, 26. Februar 2010 18:18