mod_rewrite .htaccess - Index Datei aus Adresszeile entfernen
Gunther
- webserver
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
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.phpDas 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
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
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
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
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.
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