bjoern: mod_rewrite

Hallo zusammen!

Mit dem Apachemodul mod_rewrite möchte ich dateien in der Form "inahalt.php?id=23&navi=456&kategorie=78" in scheinbare html-dateien verwandeln.

Ich habe zwar schon ewig im Netz nach Tutorials usw. gesucht, aber bei mir will es einfach nicht klappen! By the way: lässt sich herrausfinden ob mod_rewrite auf dem server überhaupt installiert ist? vielleicht habt ihr ja mal ein paar befehle, die ich in die .htaccess reinschreiben soll um ein vorhandensein des moduls zu testen. sollte idiotensicher sein, dass ich dass dann auch umsetzen kann :o)

Meine .htaccess sieht bislang so aus:

// aktiviere das benötigte Modul mod_rewrite //

RewriteEngine on
Options FollowSymLinks

// gebe das zu verwendende Unterverzeichnis an //

RewriteBase /

// Ersetzungsregeln //

RewriteRule kreativitaet.html loadContent.php?page=154&tabelle=subpages

Die Datei loadcontent.php liegt im unterverzeichnis dateien und die htaccess im rootverzeichnis.

Wie maceh ich es richtig? Was bedeutet "Options FollowSymLinks" und wie setzt man "RewriteBase" richtig ein??

gruß bjoern

  1. Hi bjoern,

    ich hab das gerade bei meinem Webserver selbst gemacht. Vielleicht kann ich Dir helfen.
    Schau doch mal mit der Funktion phpinfo() nach, ob das Modul mod_rewrite überhaupt geladen ist! Schreibe dazu am besten eine eigene PHP-Datei, die Du dann im Browser aufrufst. Danach solltest Du schonmal schlauer sein!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hi Felix, danke für den tip.

      habe die phpinfo() schon durchwühlt. auf meinem server wird mod_rewrite aber nicht unter loaded_moduls angezeigt, weil es "anders installiert" sei.

      Trotzdem solle es definitiv funktionieren.

      mfg
      bjoern

  2. Hallo Björn!

    Du machst das auch nicht ganz richtig.

    Ein Rewrite einer "Statischen" Datei in eine PHP Datei sollte so aussehen:

    RewriteEngine on
    RewriteRule ^datei(.*).html$ /datei.php?c=$1

    Dabei wird XXX der dateiXXX.html als Variablen-Wert der Datei.php?c=XXX angehängt.

    Was Du machen willst würde ja dazu führen, dass Du keinerlei Werte mehr an Deine Seiten übergeben könntest.

    ANsonsten bietet Dir Google viel Information zu den Suchbegriffen "RewriteEngine on" und Suchmaschinenoptimierung etc.

    Schönen Gruß

    Afra

    1. Moin Afra,

      Vielen Dank für deine Bemühungen.

      Meine .htaccess:

      RewriteEngine on

      RewriteRule ^dateien/kreativitaet.html$ /dateien/loadContent.php?pages_ID=1&tabelle=cms_subpages&content_ID=pagesub1_ID

      Sollte eigentlich funktionieren. Tuts aber nicht. Wieso??

      Zweite .htaccess unter anderer Domain (selber Server):

      RewriteEngine on

      RewriteRule ^dateien/buero.html$ /dateien/inhalt.php?pages_ID=17&tabelle=cms_50104B03_mainpages&content_ID=page_ID

      FUNKTIONIERT! Wo liegt das Problem bei der ersten .htaccess??

      Gruß
      Bjoern

      1. Hallo Björn!

        Da man anhand Deiner Angaben nicht sehen kann ob du in übergeordneten Ordnern eventuell schon andere Rewrite Rules definiert hast die in Deine neuen Definitionen mit rein spielen - wir also nicht genau sehen können wie Deine Ordnerstruktur aufgebaut ist, kann ich dir nicht wirklich helfen. Nochmals anzumerken bleibt, dass Du so zwar eine _html_ Datei vorgaukelst, der eigentliche Vorteil, dass man variablen aus scheinbar statischen Seiten, oder Strukturen übergibt geht dabei halt verloren und macht viel mehr Arbeit bei Erweiterungen der Webseite

        Schönen Gruß

        Afra

        1. Hallo Björn!

          wir also nicht genau sehen können wie Deine Ordnerstruktur aufgebaut ist

          Die .htaccess liegt im root verzeichnis. im unterverzeichnis "dateien" die datei loadContent.php
          keine weiteren .htaccess dateien.

          Inhalt der .htaccess im rootverzeichnis:

          RewriteEngine on
          RewriteRule ^dateien/keks1.html$ /dateien/loadContent.php [L]
          RewriteRule ^dateien/keks2.html$ /dateien/loadContent.php?pages_ID=1&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks3.html$ /dateien/loadContent.php?pages_ID=2&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks4.html$ /dateien/loadContent.php?pages_ID=3&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks5.html$ /dateien/loadContent.php?pages_ID=4&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks6.html$ /dateien/loadContent.php?pages_ID=5&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks7.html$ /dateien/loadContent.php?pages_ID=6&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks8.html$ /dateien/loadContent.php?pages_ID=7&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks9.html$ /dateien/loadContent.php?pages_ID=13&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks10.html$ /dateien/loadContent.php?pages_ID=14&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks11.html$ /dateien/loadContent.php?pages_ID=15&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks12.html$ /dateien/loadContent.php?pages_ID=16&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks13.html$ /dateien/loadContent.php?pages_ID=17&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks14.html$ /dateien/loadContent.php?pages_ID=18&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks15.html$ /dateien/loadContent.php?pages_ID=19&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks16.html$ /dateien/loadContent.php?pages_ID=10&tabelle=cms_subpages2&content_ID=pagesub2_ID [L]
          RewriteRule ^dateien/keks17.html$ /dateien/loadContent.php?pages_ID=21&tabelle=cms_subpages&content_ID=pagesub1_ID [L]
          RewriteRule ^dateien/keks18.html$ /dateien/loadContent.php?pages_ID=22&tabelle=cms_subpages&content_ID=pagesub1_ID [L]

          Funktioniert so aber nicht, er spuckt immer einen 404 error aus. wo liegt das problem?

          Nochmals anzumerken bleibt, dass Du so zwar eine _html_ Datei vorgaukelst, der eigentliche Vorteil, dass man variablen aus scheinbar statischen Seiten, oder Strukturen übergibt geht dabei halt verloren und macht viel mehr Arbeit bei Erweiterungen der Webseite

          Das stimmt. es handlet sich inhaltmäßig um ein kleineres projekt, bei dem nicht viele siten hinzukommen werden. (wenn überhaupt welche hinzukommen). bei größeren portalen würde ich dann auch auf jeden fall anders atbeiten.

          lieben gruß
          björn

          1. Hallo!

            Auch kleine Projekte kann man sauber aufsetzen.

            Wieso verwendest Du nicht einfach:

            RewriteEngine on
            RewriteRule ^dateien/keks(.*).html$ /dateien/loadContent.php?pages_ID=$1&tabelle=cms_subpages&content_ID=pagesub1_ID

            Der 404er bedeutet doch, dass er unter der von Dir angegebenen Pfadangabe keine Datei finden kann. Also musst Du versuchen diese richtig zu stellen. Leider weiß ich diesen Pfad selbst nicht, den kannst nur Du wissen ;o)

            Vielleicht benötigst Du noch die RewriteBase Directive?

            http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html#rewritebase

            Schönen Gruß