fencingline: mod rewrite: album_pic.php?pic_id=50 -> gallery/image.php?pic_id

Hallo zusammen,

ich benötige Hilfe in Sachen mod rewrite. :)

Folgendes Problem stellt sich bei uns:

Im Internet sind zu Hauf Bilder zu unserem Forum verlinkt, welche in eienr Galerie gespeichert sind. Bei einer älteren Version war die Aufrufart der Bilder anders als heute, weshalb wir nun zu Haud 404er Fehler erhalten. Folgendes Verhalten haben wir:

Alte Aufrufart:
http://www.mydomain.de/album_pic.php?pic_id=50
http://www.mydomain.de/album_pic.php?pic_id=300
http://www.mydomain.de/album_pic.php?pic_id=649
http://www.mydomain.de/album_pic.php?pic_id=653

Heutige Aufrufart:
http://www.mydomain.de/gallery/image.php?pic_id=50
http://www.mydomain.de/gallery/image.php?pic_id=300
http://www.mydomain.de/gallery/image.php?pic_id=649
http://www.mydomain.de/gallery/image.php?pic_id=653

Ich habe mich in mod rewrite versucht, kriege es aber nicht gebacken und komme auch mit der Syntax nicht zurecht. Folgendes liefert auf jeden Fall nach wie vor einen 404er Fehler:

RewriteCond %{REQUEST_FILENAME} /album_pic.php?pic_id=(.+)
RewriteRule (.*) /gallery/image.php?pic_id=%1 [L]

Des Weiteren bräuchte ich noch einen einfachen Befehl ohne Variablen, nach dem Motto:

forums.html -> index.php
404.php -> error_page.php?type=404

Wir hatten da früher einfach einiges anders als in der jetzigen Version und möchten die 404er Fehler etwas reduzieren ...

Vielen Dank bereits im Voraus!

LG

FCL

  1. Hellihello

    http://www.mydomain.de/album_pic.php?pic_id=50

    http://www.mydomain.de/gallery/image.php?pic_id=50

    RewriteRule /gallery/image.php?pic_id=([0-9]{2,3}) /gallery/image.php?pic_id=$1 [L]

    ?

    RewriteRule forums.html index.php [L]

    ?
    ungetestet.

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Hi

      RewriteRule /gallery/image.php?pic_id=([0-9]{2,3}) /gallery/image.php?pic_id=$1 [L]
      RewriteRule forums.html index.php [L]
      ungetestet.

      Nicht vergessen, das ist eine Regexp und Punkte müssen maskiert werden!
      Also . statt .
      Ansonsten heißt es ja "beliebiges Zeichen".

      —Gabriel

    2. Hallo,

      RewriteRule /gallery/image.php?pic_id=([0-9]{2,3}) /gallery/image.php?pic_id=$1 [L]

      Ich denke du meinst:
      RewriteRule /album_pic.php?pic_id=([0-9]{2,3}) /gallery/image.php?pic_id=$1 [L]

      ???

      Ich habe dies so getestet und es funktioniert nicht. :(

      Egal ob die Punkte maskiert sind oder nicht, es interessiert ihn einfach nicht. :(

      LG

      FCL

  2. Hi,

    Folgendes liefert auf jeden Fall nach wie vor einen 404er Fehler:

    RewriteCond %{REQUEST_FILENAME} /album_pic.php?pic_id=(.+)

    Natuerlich, der Querystring ist ja nicht Teil des Filename.

    Alte Aufrufart:
    http://www.mydomain.de/album_pic.php?pic_id=50

    Heutige Aufrufart:
    http://www.mydomain.de/gallery/image.php?pic_id=50

    Also muesstest du nur die Aufruf von album_pic.php auf gallery/image.php umschreiben, und den Querystring wieder anhaengen lassen - letzteres macht das Flag [QSA].

    MfG ChrisB

    1. Hallo ChrisB!

      Alte Aufrufart:
      http://www.mydomain.de/album_pic.php?pic_id=50

      Heutige Aufrufart:
      http://www.mydomain.de/gallery/image.php?pic_id=50

      Also muesstest du nur die Aufruf von album_pic.php auf gallery/image.php umschreiben, und den Querystring wieder anhaengen lassen - letzteres macht das Flag [QSA].

      Wäre hier allerdings nicht eher ein RedirectMatch permanent angebracht? Damit auch Suchmaschinen mitbekommen, dass die Pic-Dateien »moved permanently" worden sind?

      RedirectMatch permanent ^/album_pic.php(.*) http://www.example.org/gallery/image.php$1

      Oder bringt es irgendwelche Nachteile?

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hi,

        Wäre hier allerdings nicht eher ein RedirectMatch permanent angebracht? Damit auch Suchmaschinen mitbekommen, dass die Pic-Dateien »moved permanently" worden sind?

        Auch bei Nutzung von RewriteRule kannst du ueber ein entsprechendes Flag einen HTTP-Statuscode mitgeben.

        RedirectMatch permanent ^/album_pic.php(.*) http://www.example.org/gallery/image.php$1

        Das ginge wohl auch, allerdings dann ohne (.*) und $1 - RedirectMatch betrachtet auch nur den URL-Path, und nicht den Querystring.

        MfG ChrisB

        1. Hallo ChrisB!

          [RedirectMatch permanent]
          Das ginge wohl auch, allerdings dann ohne (.*) und $1 - RedirectMatch betrachtet auch nur den URL-Path, und nicht den Querystring.

          Ah, danke... war mir nicht aufgefallen, da ich es bisher für URIs ohne QS benutzt habe...

          Viele Grüße aus Frankfurt/Main,
          Patrick

          --

          _ - jenseits vom delirium - _
          [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          Nichts ist unmöglich? Doch!
          Heute schon gegökt?
  3. Hallo,

    ich habe die Lösung, sie ist folgende:

    RewriteCond %{QUERY_STRING} ^pic_id=([0-9]+)$
    RewriteRule ^album_pic.php$ /gallery/image.php?pic_id=%1 [L]

    Oh Mann ... was ein Thema. *g*

    RedirectMatch kapier ich jetzt noch nicht. Wie würde sich das praktisch auswirken? Was käme der "verlinkende" zu sehen?

    VG

    FCL

    1. Hallo fencingline!

      RedirectMatch kapier ich jetzt noch nicht. Wie würde sich das praktisch auswirken? Was käme der "verlinkende" zu sehen?

      Zunächst: bei meinem Beispiel weiter unten gehört ein »\« vor dem Punkt:

      RedirectMatch permanent ^/album_pic\.php(.*) http://www.example.org/gallery/image.php$1

      Der »Verlinkende« bekommt nichts zu sehen. Der »dem Link Folgende« wird aber redirected zur neuen URI. Und Suchmaschinen indizieren gleich die neue URI (falls Du Wert drauf legst, dass SuMas Deine Bilder indizieren - ich habe dies bei mir unterbunden).

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Re fencingline!

        Der »Verlinkende« bekommt nichts zu sehen. Der »dem Link Folgende« wird aber redirected zur neuen URI. Und Suchmaschinen indizieren gleich die neue URI (falls Du Wert drauf legst, dass SuMas Deine Bilder indizieren - ich habe dies bei mir unterbunden).

        Sorry, ich hatte nicht gleich verstanden, was Du mit Verlinkenden meinst, nach einem Schluck besten chinesischen Tees hat's aber gerappelt in der morgens noch matschen Birne!

        Du meinst: wenn jemand ein Bild von Dir direkt eingebunden hat (via <img src=...>). Nun, er bekommt das Bild von der neuen URI geliefert, weil der Request redirected wird. Insofern macht es keinen Unterschied. Zur Verdeutlichung:

        Ich habe in meiner .htaccess (hier nur als Redirect Permanent, also ohne RegExp, dafür ist ja RedirectMatch):

        # ###### DELETED PICS ###### #  
        RedirectPermanent /clubsig.jpg http://www.atomic-eggs.com/pics/deleted.gif
        

        Jetzt binde ich hier die Datei »clubsig.jpg« ein:

        Was geliefert wird, ist die Datei »deleted.gif«.

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
        1. Hallo Patrick,

          besten Dank für deine ausführlichen Erklärungen!

          Ich bin so froh, dass das bei mir nun endlich funktioniert und die 404er Fehler deutlich weniger sind.

          Ja, die Leute binden die Bilder im Web via <img src="... ein, bzw. den entsprechenden BB-Code dazu, was ja aber wieder das selbe ist.

          Ob die SuMas nun das richtige Bild finden oder nicht ist mir egal. Da die Seite eh immer und immer wieder indiziert wird, folgen die sowieso den ganzen Links innerahlb dem Projekt und finden so die neuen Bilder wieder.

          Werfen SuMas eigentlich irgendwann 404er aus ihrer Datenbank raus?

          VG

          FCL

    2. Hi,

      ich habe die Lösung, sie ist folgende:

      Das ist keine "Loesung", sondern hoechstens irgendwas, was zwar zufaellig funtkioniert, aber wenig Sinn enthaelt.

      RewriteCond %{QUERY_STRING} ^pic_id=([0-9]+)$

      Wozu eigentlich diese RewriteCond?
      Warum nicht in jedem Fall von altes Script auf neues Script umleiten?

      RewriteRule ^album_pic.php$ /gallery/image.php?pic_id=%1 [L]

      Wie gesagt, wenn du einfach umleitest, ohne dich um den Querystring zu kuemmern, fuegt das Flag [QSA] diesen wieder fuer dich an.

      MfG ChrisB