Gunther: mod_rewrite .htaccess - Index Datei aus Adresszeile entfernen

Hallo werte Selfgemeinde,

ich weiß ja, dass es hier echte Profis in diesem Bereich gibt und ich hoffe, einer von euch kann mir bitte eben schnell mal helfen - danke!

Folgendes soll erreicht werden:

  • alles was nicht direkt ein Verzeichnis oder eine Datei ist soll auf die Datei 'index.php' umgeleitet werden

  • trailing slash(es) sollen entfernt werden

  • falls ein Punkt '.' im URI vorkommt, soll dieser und alles danach entfernt werden

Dazu habe ich bis jetzt folgendes:

  
# remove slash if not directory  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^(.+)/$ /$1 [L,R=301]  
  
# remove dot and everything following  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_METHOD} =GET  
RewriteRule (.*)\..*$ /$1 [L,R=301]  
  
# rewrite to 'index.php' without redirect  
RewriteRule . index.php  

Das "funktioniert" auch soweit wie gewollt, allerdings gibt es noch einen Punkt, bei dem ich nicht so recht weiß, wie ich den umsetzen soll.

Und zwar kann man jetzt immer noch aufrufen:
  http://example.com/index.php

Das ist natürlich nicht im Sinne des Erfinders. Vielmehr soll in der Adresszeile dann nur stehen:
  http://example.com stehen.

Wie kann ich das jetzt noch erreichen?

Gruß Gunther

  1. Hallo werte Selfgemeinde,

    ich glaube, ich habe meine Frage schon selbst beantwortet.

    Das "funktioniert" auch soweit wie gewollt, allerdings gibt es noch einen Punkt, bei dem ich nicht so recht weiß, wie ich den umsetzen soll.

    Und zwar kann man jetzt immer noch aufrufen:
      http://example.com/index.php

    Das ist natürlich nicht im Sinne des Erfinders. Vielmehr soll in der Adresszeile dann nur stehen:
      http://example.com stehen.

    Wie kann ich das jetzt noch erreichen?

    Ich habe jetzt noch folgendes eingefügt:

      
    # remove index file from URL  
    RewriteCond %{REQUEST_URI} ^/index\.php$  
    RewriteRule ^ / [L,R=301]  
    
    

    Im Ganzen sieht es jetzt also so aus:

      
      
    # remove slash if not directory  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteRule ^(.+)/$ /$1 [L,R=301]  
      
    # remove dot and everything following  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_METHOD} =GET  
    RewriteRule (.*)\..*$ /$1 [L,R=301]  
      
    # remove index file from URL  
    RewriteCond %{REQUEST_URI} ^/index\.php$  
    RewriteRule ^ / [L,R=301]  
      
    # rewrite to 'index.php' without redirect  
    RewriteRule . index.php  
    
    

    Natürlich bin ich aber auch jederzeit sehr gerne an Verbesserungs-/ Optimierungsvorschlägen interessiert.

    Gruß Gunther

    1. Ich nochmal!

      Kleine Korrekturen fürs Archiv ...

      Im Ganzen sieht es jetzt also so aus:

        
      # remove slash if not directory  
      RewriteCond %{REQUEST_FILENAME} !-d  
      RewriteRule ^(.+)/$ /$1 [L,R=301]  
        
      # remove dot and everything following  
      RewriteCond %{REQUEST_FILENAME} !-d  
      RewriteCond %{REQUEST_FILENAME} !-f  
      RewriteCond %{REQUEST_METHOD} =GET  
      RewriteRule (.*)\..*$ /$1 [L,R=301]  
        
      # remove index file from URL  
      RewriteCond %{REQUEST_FILENAME} index\.php  
      RewriteRule ^ / [L,R=301]  
        
      # rewrite to 'index.php' without redirect  
      RewriteCond %{REQUEST_FILENAME} !-d  
      RewriteCond %{REQUEST_FILENAME} !-f  
      RewriteRule . index.php  
      
      

      Natürlich bin ich aber auch jederzeit sehr gerne an Verbesserungs-/ Optimierungsvorschlägen interessiert.

      Gruß Gunther

      1. Ich schon wieder!

        Dieses Modul werde ich wohl in diesem Leben nicht mehr verstehen ...!

        Jetzt wird alles was kein File oder Directory ist radikal auf 'http://example.com' redirected ...!

        Also brauche ich bitte doch noch eure Hilfe - danke!

        Mein aktueller Stand:

        remove slash if not directory

        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.+)/$ /$1 [L,R=301]

        remove dot and everything following

        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_METHOD} =GET
        RewriteRule (.)..$ /$1 [L,R=301]

        remove index file from URL

        RewriteCond %{REQUEST_FILENAME} index.php
        RewriteRule ^ / [L,R=301]

        rewrite to 'index.php' without redirect

        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule . index.php

          
          
        Gruß Gunther
        
        1. Auch wenn das hier zu einer Alleinunterhaltung wird ... ;-)

          Jetzt wird alles was kein File oder Directory ist radikal auf 'http://example.com' redirected ...!

          Nach einigem Suchen im Netz habe ich jetzt scheinbar die "Lösung" gefunden, auch wenn ich sie noch nicht wirklich zu 100% verstanden habe ...!

          Geändert ist nur der Part, der die 'index.php' aus der Adresszeile entfernt:

            
          # remove slash if not directory  
          RewriteCond %{REQUEST_FILENAME} !-d  
          RewriteRule ^(.+)/$ /$1 [L,R=301]  
            
          # remove dot and everything following  
          RewriteCond %{REQUEST_FILENAME} !-d  
          RewriteCond %{REQUEST_FILENAME} !-f  
          RewriteCond %{REQUEST_METHOD} =GET  
          RewriteRule (.*)\..*$ /$1 [L,R=301]  
            
          # remove index file from URL  
          RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC]  
          RewriteRule ^ /%1 [L,R=301]  
            
          # rewrite to 'index.php' without redirect  
          RewriteCond %{REQUEST_FILENAME} !-d  
          RewriteCond %{REQUEST_FILENAME} !-f  
          RewriteRule . index.php  
          
          

          Gruß Gunther

  2. Tach!

    Und zwar kann man jetzt immer noch aufrufen:
      http://example.com/index.php
    Das ist natürlich nicht im Sinne des Erfinders. Vielmehr soll in der Adresszeile dann nur stehen:
      http://example.com stehen.

    Was für ein Nachteil ergibt sich denn, wenn man das so aufrufen kann? Solange dein Script ordentliche URLs produziert und der Suchmaschine über die Canonical-Dingens-Angabe sagt, welche URL (bei mehreren Möglichkeiten) sie indexieren soll, kann doch der Anwender Mist in die URL schreiben wie er lustig ist. Das ist sein von ihm verursachtes Problem, dass ich ihm nicht lösen muss. Beim nächsten ordnungsgemäßen Klick ist die URL wieder sauber.

    dedlfix.

    1. Tach!

      Und zwar kann man jetzt immer noch aufrufen:
        http://example.com/index.php
      Das ist natürlich nicht im Sinne des Erfinders. Vielmehr soll in der Adresszeile dann nur stehen:
        http://example.com stehen.

      Was für ein Nachteil ergibt sich denn, wenn man das so aufrufen kann? Solange dein Script ordentliche URLs produziert und der Suchmaschine über die Canonical-Dingens-Angabe sagt, welche URL (bei mehreren Möglichkeiten) sie indexieren soll, kann doch der Anwender Mist in die URL schreiben wie er lustig ist.

      Einen direkten Nachteil sehe ich da auch nicht unbedingt, eher eine Art "Schönheitsfehler".
      Und ich habe nicht das "Problem", auf die "Canonical-Dingens-Angabe" angewiesen zu sein. Denn wer weiß schon, ob sich die anderen SuMa außer Google auch daran halten!?

      Das ist sein von ihm verursachtes Problem, dass ich ihm nicht lösen muss. Beim nächsten ordnungsgemäßen Klick ist die URL wieder sauber.

      Müssen sicher nicht, da stimme ich dir zu. Aber trotzdem fände ich die "Vermeidung" einfach "eleganter", zu mal es ja auch recht einfach zu bewerkstelligen zu sein scheint. ;-)

      Gruß Gunther