Shadowcrow: Dateinnahmen verkürzen wenn per .htacces nicht möglich.

hi,

ich habe meine Seite dynamisch erstellt (halbwegs) und deswegen kommen "längere" URLs vor, z.B.: home.php?inhalt=news. das ist ja wohl nicht so Besucherfreundlich (und ich hab mir sagen lassen, das Suchmaschinen das auch nicht mögen?).
Da ich leider über die .htacces keine rewrite rule festlegen kann, wollte ich mir anders behelfen. der plan war: den pfad gebe ich in der Navigation ansatt mit: ?inhalt=news  mit news/ an.
Das erzeugt (klar) einen 404er, ok, im Errordokument steht folgende abfrage:

  
<?php  
$mainPath = "/area51/";  
$mpLength = strlen( $mainPath  );  
$request_uri = $_SERVER['REQUEST_URI'];  
$url = substr ($request_uri , $mpLength );  
if ($url == 'News/') {  
           header ('Location: http://example.com/area51/home.php?inhalt=News');  
           } elseif ($url == "Home/") {  
             header ('Location: http:/example.com/area51/home.php');  
           } elseif ($url == "guestbook/") {  
             header ('Location: http://example.com/area51/home.php?inhalt=guestbook');  
           } else   (include("index.php"));  
?>  

Das funktioniert auch, ABER wenn ein Besucher jetzt http://example.com/area51/news eingibt oder http://example.com/area51/news/  klappt das nicht mehr.
1. weil bei den Variablen die Groß/Kleinschreibung beachtet wird.
2. weil News/, news/, News und news nunmal nicht identisch sind.

Gibt es dafür eine andere Lösung als ALLE Möglichkeiten in der Abfrage reinzuschreiben (sind ja noch ein paar Navigationslinks als oben aufgeführt)? Ist das so eigentlich performant? Gibt es andere Möglichkeiten?

Danke,

gruss
shadow

--
If there's anything more important than my ego around, I want it caught and shot, now.
  1. echo $begrüßung;

    ich habe meine Seite dynamisch erstellt (halbwegs) und deswegen kommen "längere" URLs vor, z.B.: home.php?inhalt=news. das ist ja wohl nicht so Besucherfreundlich (und ich hab mir sagen lassen, das Suchmaschinen das auch nicht mögen?).

    Wenn du Angst vor der Indizierbarkeit durch Suchmaschinen hast, dann solltest du solche

    if ($url == 'News/') {
      header ('Location: http://example.com/area51/home.php?inhalt=News');

    Weiterleitungsspielchen weglassen, denn dann hast du genau den Fall, den du vermeiden wolltest: Dokumente mit "komischen" Adressen.
    Der Client erwartet ein Dokument unter einer bestimmten Adresse und will nicht noch erst woanders hin geschickt werden, also liefere den Inhalt aus anstatt einer Weiterleitung.

    Das funktioniert auch, ABER wenn ein Besucher jetzt http://example.com/area51/news eingibt oder http://example.com/area51/news/  klappt das nicht mehr.

    1. weil bei den Variablen die Groß/Kleinschreibung beachtet wird.
    2. weil News/, news/, News und news nunmal nicht identisch sind.

    Dann mach sie doch identisch, indem du sie vor dem Prüfen in eine einheitliche GROSS- oder klein-Schreibweise bringst.

    Aber mal was ganz anderes: PATH_INFO

    http://example.com/index.php/path/info

    funktioniert unterm Apachen hervorragend und auch im IIS.

    echo "$verabschiedung $name";

    1. hi $name,

      Wenn du Angst vor der Indizierbarkeit durch Suchmaschinen hast, dann solltest du solche

      |

      if ($url == 'News/') {
        header ('Location: http://example.com/area51/home.php?inhalt=News');

      |

      Weiterleitungsspielchen weglassen, denn dann hast du genau den Fall, den du vermeiden wolltest: Dokumente mit "komischen" Adressen.
      Der Client erwartet ein Dokument unter einer bestimmten Adresse und will nicht noch erst woanders hin geschickt werden, also liefere den Inhalt aus anstatt einer Weiterleitung.

      hm ja, soo ganz glücklich bin ich mit der weiterleitung auch nicht, aber ich wollte vermeiden für jede unterseite eine datei anzulegen.
      ok, menu und so kann ich auslagern, aber trotzdem..... jetzt habe ich nur eine datei (home.php) die halt je nach aufgerufener URL anderen inhalt ausspuckt.

      Das funktioniert auch, ABER wenn ein Besucher jetzt http://example.com/area51/news eingibt oder http://example.com/area51/news/  klappt das nicht mehr.

      1. weil bei den Variablen die Groß/Kleinschreibung beachtet wird.
      2. weil News/, news/, News und news nunmal nicht identisch sind.

      |

      Dann mach sie doch identisch, indem du sie vor dem Prüfen in eine einheitliche GROSS- oder klein-Schreibweise bringst.

      ich habe das eingefügt und es funktioniert.

      $url = strtolower($url);
      $url = rtrim($url, "/");

      Aber mal was ganz anderes: PATH_INFO

      versteh ich nicht, sorry, da steh ich jetzt auf dem schlauch.

      gruss
      shadow
      --
      If there's anything more important than my ego around, I want it caught and shot, now.

      1. echo $begrüßung;

        hm ja, soo ganz glücklich bin ich mit der weiterleitung auch nicht, aber ich wollte vermeiden für jede unterseite eine datei anzulegen.
        ok, menu und so kann ich auslagern, aber trotzdem..... jetzt habe ich nur eine datei (home.php) die halt je nach aufgerufener URL anderen inhalt ausspuckt.

        Du kannst doch auch den auszuliefernden Text gleich mit dem Error-Dokument erzeugen.

        Wenn du keine dynamischen Inhalte in der Seite hast, könnte das Error-Dokument auch die Seite erzeugen, ausliefern und extra noch als Datei ablegen. Nachfolgende Seitenaufrufe kann der Apache dann sofort bedienen. Wenn du irgendwann den Inhalt in deiner Datenquelle änderst, löschst du die Seite(n) wieder und lässt sie beim nächsten Aufruf vom Error-Dokument neu erzeugen.

        Aber mal was ganz anderes: PATH_INFO
        versteh ich nicht, sorry, da steh ich jetzt auf dem schlauch.

        Wie du an diesem Beispiel siehst

        http://example.com/index.php/path/info

        befinden sich die hinter dem index.php noch weitere Pfad-Bestandteile. Der Apache findet bereits zum index.php eine Datei und lässt diese durch PHP ausführen. Der Teil /path/info wird vom Apachen nicht mehr weiter beachtet und lässt sich mit $_SERVER['PATH_INFO'] im PHP-Script abfragen. Das index.php bekommt man zwar auch noch weg, das aber nur mit mod_rewrite.

        echo "$verabschiedung $name";

        1. hi $name,

          Du kannst doch auch den auszuliefernden Text gleich mit dem Error-Dokument erzeugen.

          theoretisch ja, das war auch mein erster ansatz (als error-dok. hatte ich die index.php festgelegt) :-) aber ich habs nicht hinbekommen, merke aber gerade das ich da einem gewaltigem denkfehler aufgesessen bin :-( werde das wohl so umsetzen.

          |

          Wenn du keine dynamischen Inhalte in der Seite hast, könnte das Error-Dokument auch die Seite erzeugen, ausliefern und extra noch als Datei ablegen. Nachfolgende Seitenaufrufe kann der Apache dann sofort bedienen. Wenn du irgendwann den Inhalt in deiner Datenquelle änderst, löschst du die Seite(n) wieder und lässt sie beim nächsten Aufruf vom Error-Dokument neu erzeugen.

          öhä, verstehe was du meinst, alle seiten (außer dem gästebuch, das auf einem anderen server liegt) sind statisch (wobei ich das ändern wollte und irgendwann inhalte aus einer datenbank einfügen will, aber für die dauer einer session würde oben genannter weg auch dann gehen, die daten würden sich nur alle paar wochen ändern) aber da ich mich erst seit einer woche mit PHP beschäftige, hebe ich mir das für später auf, weiß nicht ob ich das schon hinbekomme (wie ich dateien anlege und mit inhalt fülle weiß ich).

          Wie du an diesem Beispiel siehst

          |

          http://example.com/index.php/path/info

          |

          befinden sich die hinter dem index.php noch weitere Pfad-Bestandteile. Der Apache findet bereits zum index.php eine Datei und lässt diese durch PHP ausführen. Der Teil /path/info wird vom Apachen nicht mehr weiter beachtet und lässt sich mit $_SERVER['PATH_INFO'] im PHP-Script abfragen. Das index.php bekommt man zwar auch noch weg, das aber nur mit mod_rewrite.

          ich glaube ich weiß worauf du hinaus willst.

          also ich gebe als pfade an:
          http://example.com/index.php/news
          http://example.com/index.php/guestbook
          etc.

          und frage dann in der index.php ab was denn angefordert wurde und gebe denn inhalt raus. das hört sich super an, wäre für die suchmaschinen ideal, aber sorgen machen mir bei der lösung die besucher die evtl. das "zu fuss" eingeben wollen. hmm ist aber eine überlegung wert (mehr als das sogar) ich denke ich werde das so machen, ist sicher besser als eine umleitung.

          vielen dank.

          gruss
          shadow
          --
          If there's anything more important than my ego around, I want it caught and shot, now.