Leon: Geordnete Url durch Mod_Rewrite

Hallo Forum,

ich möchte mein Forum (ein Woltlab Burning Board 2.1) für Suchmaschinen durchsuchbar machen. Dabei stört aber die Domain, da die Suchmschine erkennt, dass sie dynamisch ist. Ich würde jetzt also gerne diese URL

http://www.test.de/forum/thread.php?threadid=1273&sid=

in diese URL

http://www.test.de/forum/thread1273.html

umgewandeelt haben.

Hat jemand Erfahrung damit oder eine Idee zur Umsetzung?

Leon

  1. Hallo Leon,

    Hat jemand Erfahrung damit oder eine Idee zur Umsetzung?

    Das geringste Problem dürfte das umschreiben durch mod_rewrite sein. Eine einfache .htaccess-Datei im forum-Unterverzeichnis müsste mit folgendem Inhalt das Umschreiben bewirken:

    RewriteEngine On
    RewriteBase /forum/
    RewriteRule ^thread(\d+).html$   thread.php?threadid=$1   [L,QSA]

    (nicht getestet, sollte aber funktionieren)

    Das größte Problem, das Du haben wirst, ist der Boardsoftware zu sagen, dass sie auch überall die Links auf die thread123.html ausgeben soll und nicht auf thread.php?threadid=123. Du wirst also in der Software nach 'thread.php' suchen müssen und überall die Stellen abändern müssen. Das ist sicherlich ein ganzer Batzen Arbeit.

    Achja, wenn Du schon mod_rewrite verwendest, warum dann Pfade wie '/forum/thread123.html'? Warum lässt Du nicht gleich die Endung weg? ('/forum/thread123' oder '/forum/threads/123')

    Viele Grüße,
    Christian

    PS: Du bist von der Stiftung Warentest?

    1. Ok, ich habe jetzt die .htaccess erstellt und mit dem gleichen inhalt im boardverzeichnis (also /forum/)abgespeichert den du gepostest hast. im forum habe ich jetzt einen testlink geändet der im quelltext wie folgt aufgebaut ist:

      thread$threads[threadid].html

      das erzeugt dann solche links:

      thread1188.html

      wenn ich jetzt aber auf den link klicke bekomme ich nur eine 404, seite nicht gefunden-meldung! woran könnte das liegen? das rewrite_modul ist geladen.

      p.s.: Ich bin nicht von der stiftung warentest.

      Hallo Leon,

      Hat jemand Erfahrung damit oder eine Idee zur Umsetzung?

      Das geringste Problem dürfte das umschreiben durch mod_rewrite sein. Eine einfache .htaccess-Datei im forum-Unterverzeichnis müsste mit folgendem Inhalt das Umschreiben bewirken:

      RewriteEngine On
      RewriteBase /forum/
      RewriteRule ^thread(\d+).html$   thread.php?threadid=$1   [L,QSA]

      (nicht getestet, sollte aber funktionieren)

      Das größte Problem, das Du haben wirst, ist der Boardsoftware zu sagen, dass sie auch überall die Links auf die thread123.html ausgeben soll und nicht auf thread.php?threadid=123. Du wirst also in der Software nach 'thread.php' suchen müssen und überall die Stellen abändern müssen. Das ist sicherlich ein ganzer Batzen Arbeit.

      Achja, wenn Du schon mod_rewrite verwendest, warum dann Pfade wie '/forum/thread123.html'? Warum lässt Du nicht gleich die Endung weg? ('/forum/thread123' oder '/forum/threads/123')

      Viele Grüße,
      Christian

      PS: Du bist von der Stiftung Warentest?

      1. Hallo Leon,

        wenn ich jetzt aber auf den link klicke bekomme ich nur eine 404, seite nicht gefunden-meldung! woran könnte das liegen?

        - Der Server ignoriert alle .htaccess-Dateien.
         - Irgendetwas ist in der .htaccess-Datei falsch.

        Du könntest mal probieren

        RewriteBase /forum

        statt

        RewriteBase /forum/

        anzugeben.

        Ansonsten: Hast Du Zugriff auf Dein error-log? Steht dort etwas von "thread1188.html not found" (o.ä.) oder "thread.php not found"?

        Viele Grüße,
        Christian

        PS: http://learn.to/quote/

        1. Hallo Christian,

          das mit dem Slash hat nicht funktioniert. Auf die Errorlog kann ich nicht zugreifen. Gibt es dafür nicht ein Testscript? Der Service vom Provider ist zu vergessen. Ich weiß mir echt nicht zu helfen, aber ich brauche diese Lösung unbedingt.

          Ich habe bereits in einem anderen Forum eine Lösung gefunden die nicht funktioniert.

          Da wird noch mit einer mod_rewrite.php gearbeitet. Hier die kurze Anleitung von www.woltlab.de

          1. Du erstellst eine Datei .htaccess in deinem Boardverzeichnis (wenn die Datei noch nicht existiert)

          2. Da fügst du folgenden Code ein: code:

          RewriteEngine On
          RewriteRule ^([^/]+)/(.+)/x.wbb$ mod_rewrite.php?$1&........................$2 [L]
          RewriteRule ^([^/]+)/x.wbb$ mod_rewrite.php?$1 [L]
          RewriteRule ^([^/]+)x.wbb$ mod_rewrite.php?$1 [L]

          1. Du erstellst eine Datei mod_rewrite.php in deinem Boardverzeichnis

          2. Da fügst du folgenden Code ein: php:

          <?
          if(!$_SERVER['QUERY_STRING']) die('kein direktaufruf erlaubt!');
          unset($filename);
          if(strpos($_SERVER['QUERY_STRING'],'&........................')===false)
          {
           #echo "kein querystring\n<br>\n";
           #echo "dateiname: ".$_SERVER['QUERY_STRING'];
           $filename=str_replace('..','',$_SERVER['QUERY_STRING']);
          }
          else
          {
           list($filename,$querystring)=explode('&........................',$_SERVER['QUERY_STRING']);
           #echo "querystring: ".$querystring;
           #echo "\n<br>\n";
           #echo "dateiname: ".$filename;
           #echo "\n<br>\n";
           $http_querystring=explode('/',$querystring);
           while(list(,$value)=each($http_querystring))
           {
            if(!strlen($value) || !strlen(current($http_querystring)))
            {
             continue;
            }
            $varname=$value;
            $varvalue=current($http_querystring);
            $_GET[$varname]=$varvalue;
            $_REQUEST[$varname]=$varvalue;
            #echo $value.'='.current($http_querystring)."\n<br>\n";
            next($http_querystring);
           }
          }
          include './'.$filename/*.'.php'*/;
          ?>

          Füge in dein headinclude-Template folgenden Code ein: code:
          1:

          <base href="http://url/zu/deinem/boardverzeichnis/">

          1. Jetzt änderst du in deinen Templates alle Links, die statt & bzw. = einen / verwenden sollen so ab:

          Aus
          board.php?boardid=$row[boardid]&sid=$session[hash]
          wird:
          board/boardid/$row[boardid]/sid/$session[hash]/x.wbb

          Wenn irgendwo in einem Link ./ verwendet wird, musst du es entfernen.
          Da sich auf Links innerhalb von JavaScripts (Popups) <base href> nicht auswirkt musst du da vor den Dateinamen den kompletten URL-Pfad setzen.

          Leon

          1. Hallo Leon,

            das mit dem Slash hat nicht funktioniert.

            Dann Probiere mal folgendes:

            RewriteEngine on
            RewriteBase /forum
            RewriteRule ^thread.php    [F]

            Wenn Du nun immernoch auf die thread.php zugreifen kannst und kein 403 Forbidden kommt, dann wird die .htaccess-Datei ignoriert und Du kannst nichts machen, außer Dich an Deinen Hoster wenden.

            Da wird noch mit einer mod_rewrite.php gearbeitet. Hier die kurze Anleitung von www.woltlab.de
            [...]
            board/boardid/$row[boardid]/sid/$session[hash]/x.wbb

            *argh* - die Session-ID sollte gerade *nicht* als Verzeichnis verwendet werden, sonst wird das noch von Suchmaschinen indiziert. Die Session-ID sollte durchaus im Query-String enthalten sein! Von dieser Lösung halte ich nicht viel. Viel besser war Dein Ansatz, den Du am Anfang dieses Threads verfolgt hast.

            Viele Grüße,
            Christian

            1. Hallo Christian,

              glücklicherweise kommt eine Fehlermeldung. Die Seite kann nicht gefunden werden! Weißt du sonst noch einen Rat?

              Leon

              1. Hallo Leon,

                Weißt du sonst noch einen Rat?

                Kannst Du noch einmal folgenden Inhalt in die .htaccess-Datei stellen:

                RewriteEngine On
                RewriteBase /forum
                RewriteRule ^thread(\d+).html$   thread.php?threadid=$1   [L,QSA]

                Und die URL dann posten? Damit man sich das Problem mal "ansehen" kann?

                Viele Grüße,
                Christian

                1. Hallo Christian,

                  vielen dank schon mal zwischendurch für deine Hilfe. Das Testforum liegt jetzt im Verzeichnis wbb2. Die komplette Url lautet:

                  http://www.growbook.de/wbb2/

                  Die Links sind im Moment nur in den Foren geändert. Also die Links direkt zu den Beiträgen. Du findest solche z.B. unter:

                  http://www.growbook.de/wbb2/board.php?boardid=111&sid=

                  Der Inhalt der .htaccess sieht wie folgt aus:

                  RewriteEngine On
                  RewriteBase /wbb2
                  RewriteRule ^thread(\d+).html$   thread.php?threadid=$1   [L,QSA]

                  Das die Bilder nicht angezeigt werden liegt daran, dass ich sie noch nicht in das entsprechende Verzeichnis kopiert habe.

                  Leon

                  1. Hallo Leon,

                    Als ich das gesehen habe, konnte ich es erst selbst nicht glauben, aber:

                    RewriteRule ^thread(\d+).html$   thread.php?threadid=$1   [L,QSA]

                    *argh* Ich bin ja ein Vollidiot! Der Apache versteht natürlich das '\d' nicht, weil er die POSIX-Regexp-Funktionen verwendet. Sorry, tut mir schrecklich leid!

                    So lautet es richtig:

                    RewriteRule ^thread([0-9]+).html$   thread.php?threadid=$1   [L,QSA]

                    Damit sollte es dann auch funktionieren.

                    Viele Grüße,
                    Christian

                    1. Ees hat sofort funktioniert. Habe jetzt noch diese Zeile eingefügt

                      RewriteRule ^board([0-9]+).html$   board.php?boardid=$1   [L,QSA]

                      und alles entspricht bisher meinen Wünschen.

                      Vielen vielen Dank für die Hilfe!

                      Leon

  2. Ich würde jetzt also gerne diese URL

    http://www.test.de/forum/thread.php?threadid=1273&sid=

    in diese URL

    http://www.test.de/forum/thread1273.html

    umgewandeelt haben.

    http://selfsuche.teamone.de/cgi-bin/hack.cgi?suchausdruck=rewrite+url&feld=text&index_5=on&hits=100