manfred: statische URLs dynamisch generieren

Hallo,
ich hab' diesen Thread schon unter http://forum.de.selfhtml.org/archiv/2002/7/17754/#m99742 begonnen, aber jetzt das Thema nochmal präzisiert.

Wie lässt sich Folgendes am besten realisieren:
Ich möchte auf einer Seite Links angeben, die statisch "aussehen", also auch von Suchmaschinen leicht indiziert werden können, die aber serverseitig nicht vorhanden sind, sondern per url-redirect auf ein skript verweisen (das skript hab ich in perl schon fertig) das bei Aufruf sauberen HTML code erzeugt.

Virtueller Apache server bei einem Webhoster;
struktur
/             www-root
/cgi-bin/     darin ist das redirect.cgi
/sub          in dieses Verzeichnis zeigen die "statischen' URLs
/sonstwas

Ich hab mir ein paar Lösungen überlegt, stehe aber überall letztlich wieder an.

Ein einfacher Redirect per .htacces Datei in das Verzeichnis /sub mit einer Zeile wie folgt wäre kaum eine CPU-Belastung. ABER
 Redirect /*.html /cgi-bin/redirect.cgi

bringt nur 404-Fehler. Was mache ich falsch?

b) ein mod_rewrite kostet mehr CPU-Zeit. Trotzdem versuch ichs, wieder eine .htaccess Datei ins Verzeichnis /sub
 RewriteEngine on
 RewriteBase [da fehlt was??]
 RewriteCond /%{REQUEST_FILENAME} -f
 RewriteRule ^/!(.*.html)$ /cgi-bin/redirect.cgi

bewirkt 404.error

ausserdem muss das Rufzeichen (!)=kein .html irgendwo andershin

dazu fehlt möglicherweise ein [R] am Ende der Rewrite Rule, da der Apache als erstes ein 404 file not found an den browser sendet, und danach der print "Location: http://..." Befehl aus meinem perl-script nicht mehr ausgeführt wird.

Falls meine Frage die Thematik des Forums sprengt und mir jemand hilft das Problem zu lösen, könnten wir die Lösung anschliessend posten. Beachtet werden sollte auch, dass der Server nicht überbelastet werden soll. Vielleicht geht ja auch ein einfaches
 ErrorDocument 404 /cgi-bin/redirect.cgi
wenn jemand eine Lösung dafür hat, dass das redirect.cgi in dieser Form den print "Location: http://..." Befehl verweigert.

Bin auch für links/Literaturhinweise aller Art dankbar, also nicht zu faul mich durchzuknabbern, aber url-rewriting ist meist so beschrieben als hätte man selbst den server. Auf einem virtuellen host sind ja dazu noch die Pfade oft anders als in der Apache Dokumentation, aber wie man RewriteBase richtig setzt konnte ich auch nirgends finden.

Ächz ...

  1. Jou Jou,
    so ganz kann ich Dir noch nicht folgen,
    aber wenn du aus 0815.html ein redirect.pl?0815 machen willst,
    wäre das so Pi mal Daumen:

    Redirect /(.*).html /cgi-bin/redirect.cgi?$1

    Ansonsten kannst Du auch direkt auf redirect.pl?0815 verlinken.
    Die Suchmaschinen, die sowas indexieren, nehmen auch diesen Link (solange er STATISCH ist);
    alle anderen merken den "Betrug" so oder so.

    Du kickst Dich erst aus den Engines,
    wenn Du Deinen Gästen ne Auswahl überlässt;
    Sei es über Formular oder Javascript.

    Viele Grüsse, ikke

    1. ... wenn du aus 0815.html ein redirect.pl?0815 machen willst,
      wäre das so Pi mal Daumen:
      Redirect /(.*).html /cgi-bin/redirect.cgi?$1
      Ansonsten kannst Du auch direkt auf redirect.pl?0815 verlinken.

      hallo auch,
      es geht nicht ums Beschummeln von Suchmaschinen, sondern darum über eine gleichbleibende (statische) --> url immer den aktuellsten Kontext aus einer datenbank zu liefern; d.h. der Statische Link soll in den Suchmaschinen indiziert sein, die Seite liefert inhaltlich immer dasselbe, aber immer am neuesten Stand.

      Ich hab aber kein redirect.cgi?0815 sondern hinter dem Fragezeichen mehrere Variable redirect.cgi?a=114&b=641&c=0815 - das bringe ich nicht in den code vor .html

      Es ginge vielleicht sowas wie neuheiten/a114b641c0815/neu.html und dann ein Redirect so ähnlich wie
      Redirect /*/(.*)/.html /cgi-bin/redirect.cgi?$1

      aber für Suchindices klingt neuheiten/neu.html einfach besser.

      noch n'Kommentar zu diesem oder vorigen? Ich weiss, dass es MÖGLICH ist und gar nicht so kompliziert, Wo ist eigentlich die Syntax zu diesen Redirects und ReWrites erklärt? Ich meine, für normal Sterbliche :-)

      1. Aloha!

        ... wenn du aus 0815.html ein redirect.pl?0815 machen willst,
        wäre das so Pi mal Daumen:
        Redirect /(.*).html /cgi-bin/redirect.cgi?$1

        Das wäre die klassische Lösung. :)

        Ich hab aber kein redirect.cgi?0815 sondern hinter dem Fragezeichen mehrere Variable redirect.cgi?a=114&b=641&c=0815 - das bringe ich nicht in den code vor .html

        Warum nicht? Anders geht es nunmal nicht, wenn deine URL an das Skript dynamische Informationen weiterleiten muß.

        Mit anderen Worten: Du kannst natürlich
        /neuheiten/neu.html
        immer auf
        /redirect.cgi?a=114&b=641&c=0815
        umleiten, wenn deine Parameter in der Umleitung für diese Seite so immer gelten sollen.

        Und für jede weitere statisch wirkende URL definierst du eine weitere Umleitung.

        Eventuell ist es aber besser, wenn du doch einfach nur die statische URL an dein Skript weitergibst, damit dieses dann entscheidet, welche Parameter es benötigt.

        Wenn du anhand des Pfadnamens bestimmte Werte setzen kannst, geht natürlich auch eine Art Massenabfertigung für alle Dateien in /neuheiten:
        Ersetze
        /neuheiten/(.*).html
        durch
        /redirect.cgi?a=23&url=$1

        Ersetze
        /nachrichten/(.*).html
        durch
        /redirect.cgi?a=24&url=$1

        noch n'Kommentar zu diesem oder vorigen? Ich weiss, dass es MÖGLICH ist und gar nicht so kompliziert, Wo ist eigentlich die Syntax zu diesen Redirects und ReWrites erklärt? Ich meine, für normal Sterbliche :-)

        Es gibt bei apache.org den RewriteGuide. Da sind viele Beispiele, was man alles machen kann - sicherlich auch Dinge, die so ähnlich klingen, wie dein Problem. Vor allem hilft Rewriting in einem Beispiel dort, eine neue Serverstruktur auf die alten URLs abzubilden (von welchen aus redirected wird, damit das neue Schema bekannt wird).

        http://httpd.apache.org/docs/misc/rewriteguide.html

        Vor allem solltest du dir auch die Grafik im Abschnitt "Ruleset Processing" der Doku genau ansehen und verstehen, wann welche Ausdrücke auf was angewandt werden. Zuerst kommt nämlich der reguläre Ausdruck in der RewriteRule zum Zuge, erst danach die RewriteCond, und zum Schluß wird der URL-Ersatzausdruck der RewriteRule angewandt, um eine neue URL zu erhalten.

        http://httpd.apache.org/docs/mod/mod_rewrite.html#InternalRuleset

        Ich würde mir übrigens nicht allzuviele Gedanken über die Serverbelastung machen. Vermutlich verbraucht dein Skript ein vielfaches der Rechenzeit, um die Seiten dynamisch zu generieren.

        - Sven Rautenberg

  2. Hi,

    Ich möchte auf einer Seite Links angeben, die
    statisch "aussehen", also auch von Suchmaschinen
    leicht indiziert werden können, die aber
    serverseitig nicht vorhanden sind, sondern per
    url-redirect auf ein skript verweisen

    ich glaube, Du denkst an dieser Stelle viel zu kompliziert.

    Redirect /*.html /cgi-bin/redirect.cgi

    Benenne Dein Skript irgendwas.html.cgi (!), linke aber
    auf "irgendwas.html".
    Dann schalte "Options Multiviews" ein.

    Viele Grüße
          Michael