Ankündigung

Einklappen
Keine Ankündigung bisher.

mod_rewrite, wo ist mein # hin ?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mod_rewrite, wo ist mein # hin ?

    Ich hoffe, ich bin nicht nur einfach zu dösig um das Thema zu finden.

    Also folgendes Problem:
    Ich habe das Grundgerüst einer HP neugebaut. Nun musste ich feststellen, dass ich einige Probleme bei der google Bildersuche habe. Das Bild ist noch da und kann auch noch geladen werden (der Ordner hat sich nicht geändert) aber die Seite auf die verwiesen wird existiert so nicht mehr.

    Das mit der Seite habe habe ich mit mod_rewrite auch soweit in den Griff bekommen. Nun ist es aber so, dass ich dem Usern, der über google kommt, ganz gerne mitteilen würde, dass ein 301 vorliegt, sprich es soll modal dialog erscheinen.

    Das funktioniert bei mir so:
    PHP-Code:
    <html>
      <
    div class="modalDialog" id="b301">
        <
    div id="bild301">
          <
    a href="#close" title="Close" class="close">X</a>
          <
    h1>Permanently Moved</h1>
          <
    p align="justify">blablabla</p>
        </
    div>
      </
    div>
    </
    html
    sprich, ich brauch einen Link mit Ankeraufruf.

    in meiner .htaccess steht nun u.a. folgendes:
    Code:
    #Rewrite URL
    #***********
    RewriteEngine on 
    RewriteBase /
    RewriteRule ^body\/(cale.*)\.html$ /php/index.php?page=bilder#b301 [NE,L]
    Wenn ich /php/index.php?page=bilder#b301 aufrufe erscheint der Dialog.

    Wenn ich die Seiten body/caleg.html, body/cale1.html, body/cale2.html, (die hat google) aufrufe, wird zwar die neue Seite Bilder geladen, aber der Anker wird offenbar nicht angehängt, denn der Dialog erscheint nicht.

    Ich habe es schon mit RewriteLog versucht, aber dann verabschiedet sich die ganze Seite mit 'm 500er.

    Wäre wirklich nett von euch wenn ihr mir zeigen könntet, wo mein (Denk)Fehler liegt und wie man das zum laufen bekommen könnte.

    Achja ist übrigens nicht mein Server. /web entspricht meinem root und da liegt zur Zeit auch die .htaccess

  • #2
    Versuch es mal mit
    Code:
    [NE,L,R]
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      da habe ich noch vergessen was zu erwähnen:

      Ich lasse meine URLs statisch aussehen, da steht dann also statt domain.de/php/index.php?page=bla

      nur

      domain.de/bla.html

      mit dem [R] bekomme ich wieder /php/index.php?page=bilder#b301

      Gäbe es da noch 'ne Möglichkeit das auch zu fixen?

      Danke schon mal dafür, dass ich den Dialog sehen kann.

      Kommentar


      • #4
        Also wenn ich das jetzt richtig verstanden habe:

        Wenn ich die URL mit Fragment im Browser angebe funktioniert es weil mein Browser zunächst das Fragment ignoriert und die ganze Seite vom Server anfordert, diese komplett lädt und dann das Fragment lokal sucht.

        Bei der .htaccess und mod_rewrite geht das nicht, weil es eine Anfrage direkt an den Server gesendet wird und der das Fragment dann ignoriert. Deshalb das redirect?

        Also wenn ich die "index.php" in der URL verstecken will, dann muss einen 301 erzeugen und auf der 301-Seite könnte dann eine Link zur neuen Bilderseite sein? Wenn ja, wie erzeuge ich einen 301? Bis jetzt hab ich bei meinen versuchen immer nur einen 404 erzeugt.

        Edit:
        Ich denke ich setzte die alten Ordner einfach in die robots.txt, warte 'ne Woche oder so und dann sollte ich auch meine Ruhe haben und in der Zwischenzeit bekommen die User, die über die Bildersuche kommen einfach ein 404 und gut ist.

        Kommentar


        • #5
          Mit mod_rewrite findet standardmässig keine weiterleitung statt. Die URL des Requests wird umgeschreiben.

          Ganz vereinfacht:

          Ohne mod_rewrite:
          Code:
          Browser -> Request GET /test.html -> Webserver
          Mit mod_rewrite:
          Code:
          Browser -> Reqeust GET /test.html -> mod_rewrite ändert den Request in GET /index.php?page=test -> Webserver
          Wenn du da also ein Anker an die URL hängst bringt dir das nix. Der Webserver interessiert sich dafür nicht und der Client bekommt ihn nicht zu gesicht.

          Mit der Flag R kannst du aber mod_rewrite dazu bringen eine Weiterleitung auf dem Client auszulösen.

          Code:
          Browser -> Reqeust GET /test.html -> mod_rewrite ändert den Request in GET /index.php?page=test -> Browser bekommt anweisung zu Redirect -> GET /index.php?page=test -> Webserver
          Mit der Flag R=301 kannst du auch ein 301 Redirect ausführen.

          Kommentar

          Lädt...
          X