Ankündigung

Einklappen
Keine Ankündigung bisher.

htaccess - mod_rewrite richtig einsetzen.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • htaccess - mod_rewrite richtig einsetzen.

    Hallo!

    Ich versuche gerade, eine clean-url per mod_rewrite umzuwandeln.

    Dieser Code steht derzeit in der htaccesss:
    PHP-Code:
    RewriteEngine on

    RewriteCond 
    %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} !^$
    RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301] 

    Mit diesem Code habe ich versucht, die URL umzuwandeln (zusätzlich zum obigen Code eingetragen):
    PHP-Code:
    Options +FollowSymLinks

    RewriteRule index
    (.*)\.phpindex.php?page=$
    Aber leider wird nicht die Seite aufgerufen und der Inhalt in die Seite geladen, sondern der Inhalt der Textdatei als Text im Browser angezeigt.

    Das ist der PHP-Code der eigentlich ausgeführt werden soll.

    PHP-Code:
    function load_on_start(){

        
    $page = isset($_GET['page']) ? $_GET['page'] : 'other';
        
    $sMenu explode("/"$page);
        
    $pages = array('home' => 'startx.txt''adds' => 'adds.txt''vbahtml' => 'vbahtml.txt''links' => 'links.txt'
                       
    'partner' => 'partner.txt''privat' => 'privat.txt''impress' => 'impress.txt'
                       
    'data' => 'data.txt''bblinks' =>'bblinks.txt'
                       
    'ribbonx/einfuehrung' => 'rx/s40.txt''ribbonx/diskussion' => 'rx/s43.txt'
                       
    'ribbonx/einfuehrung' => 'rx/s11.txt''ribbonx/grundlagen' => 'rx/s12.txt'
                       
    'ribbonx/schaltflaechen' => 'rx/s13.txt''ribbonx/umschaltflaechen' => 'rx/s14.txt'
                       
    'ribbonx/checkbox' => 'rx/s15.txt''ribbonx/auswahl-und-kombinationsfelder' => 'rx/s16.txt'
                       
    'ribbonx/eingabefeld' => 'rx/s18.txt''ribbonx/menue' => 'rx/s19.txt');
        
                 if(
    array_key_exists($page$pages)){
                    echo 
    file_get_contents($pages[$page]);
                    include(
    'counters/counter.php');}
                 else{
                    echo 
    "<span class='blinkenlight'>Der angeforderte Inhalt existiert nicht.</span><br>";}         
         } 
    Wie kann ich erreichen dass mod_rewrite sauber funktioniert? Oder kann man den PHP-Code so umschreiben dass ich "index.php?page=..." nicht mehr brauch?

    Danke!

    Gruß, René

  • #2
    Kurz zurückgefragt:

    Code:
    RewriteRule index(.*).php$ index.php?page=$1
    Was soll diese Regel deiner Meinung nach tun?

    Irgendwie passen die Einzelteile der Frage für mich nicht zusammen.

    Kommentar


    • #3
      Diese Regel soll aus (z.B.) "http://www.seite.de/workshop" ein "http://www.seite.de/index.php?page=workshop" machen.

      Erstellen wurde diese Regel hier => http://www.webconfs.com/url-rewriting-tool.php

      Erreichen möchte ich Folgendes:

      Aus "http://www.seite.de" soll werden => bleibt so
      Aus "http://www.seite.de/home" soll werden => "http://www.seite.de/index.php?page=home"
      Aus "http://www.seite.de/workshop/einfuehrung" soll werden => http://www.seite.de/index.php?page=workshop/einfuehrung"
      Aber jeweils so dass es der Seitenbesucher nicht mitbekommt, und diese "Umwandlungen" trotzdem sauber vom PHP-Code umgesetzt werden. Und "doppelter Content" soll weiterhin verhindert werden.

      Einfach ausgedrückt möchte ich lieber "Clean-URLs" nutzen, anstatt "Dirty-URLs" wie "http://www.seite.de/index.php?ribbonx=s40" (nutze ich bisher noch). Es soll aber weiterhin nur eine Seite existieren, bei der die Inhalte dynamisch per PHP und Javascript geladen werden.

      Kommentar


      • #4
        Diese Regel soll aus (z.B.) "http://www.seite.de/workshop" ein "http://www.seite.de/index.php?page=workshop" machen.

        Erstellen wurde diese Regel hier => http://www.webconfs.com/url-rewriting-tool.php
        Okay. Da hast du dich leider verspekuliert, denn das tut die gepostete Regel überhaupt nicht.

        Probier es mal so:

        Code:
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        
        RewriteRule ^(.*)$ index.php?page=$1 [NC,L]
        Die ersten vier Zeilen besagen so grob: „Wenn die nachgefragte Ressource existiert, dann mach kein Rewriting[, sondern liefer die Ressource wie geplant aus].“ Die Idee ist, Bilder, CSS, JS und dergleichen vom Rewriting auszuschließen.

        Die letzte Zeile besagt: „Ansonsten ruf index.php auf mit page-Parameter, der den aufgerufenen URL-Pfad als Wert enthält.“

        (Ist aber ungetestet.)

        Doku: http://httpd.apache.org/docs/current...ml#rewriterule

        Kommentar


        • #5
          Leider funktioniert das nicht sauber. Bei Nutzung dieser Anweisungen wird das gesamte CSS ignoriert, bzw. es wird nur die Textdatei ausgegeben anstatt den PHP-Code auszuführen wie vorgesehen.

          Kommentar


          • #6
            Hier noch der gesamte Code wie er ausgeführt werden soll.
            Angehängte Dateien

            Kommentar


            • #7
              Deine load_on_start-Funktion scheint aber nichts anderes zu machen, als den Inhalt einer Textdatei einzulesen und auszugeben?

              Anders ausgedrückt: Wenn bei einem URL-Pfad wie ribbonx/einfuehrung der Inhalt von rx/s11.txt ausgegeben wird, dann wird der PHP-Code ausgeführt.

              (Am Rande: Den Index ribbonx/einfuehrung hast du im Array doppelt vergeben.)

              Kommentar


              • #8
                Zitat von mermshaus Beitrag anzeigen
                Deine load_on_start-Funktion scheint aber nichts anderes zu machen, als den Inhalt einer Textdatei einzulesen und auszugeben?
                Nein, eben nicht. Die Funktion wird im HTML-Code erst aufgerufen. Mit diesem Aufruf wird der Inhalt in die Seite geladen. Ist Javascript aktiv erfolgt das Laden der Inhalte auch per Javascript (nach dem ersten Aufruf der Seite), anstatt per PHP (PHP ist überwiegend für die Barrierefreiheit und für den Direktaufruf einzelner Teile der Workshops eingebaut).

                PHP-Code:
                   <h1><span class="nosee">Hauptteil</span></h1>
                       <div id="rx11"><?php load_on_start(); ?></div><br><br>        
                   </section>

                Mir ist aufgefallen dass er das aber auch so falsch macht (ohne mod_rewrite und PHP-Code). Wenn ich "http://www.seite.de/adds" eingebe wird die Textdatei "adds.txt" im Browser angezeigt. Scheint ein Problem des Servers zu sein. Normalerweise sollte aber durch mod_rewrite "http://seite.de/index.php?page=adds" werden.

                Kommentar


                • #9
                  Zitat von mermshaus Beitrag anzeigen
                  (Am Rande: Den Index ribbonx/einfuehrung hast du im Array doppelt vergeben.)
                  Danke für den Hinweis. Eines davon sollte "ribbonx/start" ("Wie alles begann...") sein.

                  Kommentar


                  • #10
                    Inzwischen bin ich soweit dass es zwar wie gewünscht funktioniert, aber der CSS-Code wird nicht berücksichtigt.

                    Kommentar


                    • #11
                      Problem doch noch gelöst. Ich nutze jetzt einfach den Doppelpunkt (z.B. "http://www.seite.de/workshop:einfuehrung") und andere "Seitennamen" (z.B. "http://www.seite.de/add-ins").
                      Sieht m.E. immernoch besser und aussagekräftiger aus als "http://www.seite.de/index.php?page=1", oder nicht? Und trotzdem kann ich bei einer Seite bleiben und weiterhin die Barrierefreiheit gewährleisten.

                      Aber kann jemand sagen weshalb es mit "http://www.seite.de/ribbonx/sichtbarkeit-der-elemente" nicht funktioniert? Vielleicht "mod_rewrite"entsprechend anders programmieren?

                      Kommentar


                      • #12
                        Zitat von mumpel Beitrag anzeigen
                        Aber kann jemand sagen weshalb es mit "http://www.seite.de/ribbonx/sichtbarkeit-der-elemente" nicht funktioniert?
                        Fehler gefunden. Liegt am Slash. Gibt man "http://www.seite.de/home" ein funktioniert es sauber. Hängt man aber ein Slash an, also "http://www.seite.de/home/", wird die Seite fehlerhaft ausgegeben. Kann man das Verhalten ändern, also dass bei mod_rewrite das letzte Slash entsprechend behandelt (z.B. entfernt) wird?

                        Kommentar

                        Lädt...
                        X