Moin.
Ich möchte gerne, dass ein Server URLs in normalisierter Form zurückgibt.
Die Verzeichnisstruktur auf dem Server sieht so aus:
/(keine index.php)
/de/index.php
/de/kontakt.php
/en/index.php
/en/contact.php
In der Vergangenheit habe ich, auf einem anderen Server, erfolgreich folgende Regeln verwendet. Sie funktionieren auf dem Server, den ich jetzt verwende, nicht mehr.
1. "index.*"
Code:
RewriteEngine On
RewriteBase /
# Weiterleitung 301 */index.php|htm|html|xml auf */
RewriteCond %{THE_REQUEST} index\.(php|htm|html|xml) [NC]
RewriteRule (.*)index\.(php|htm|html|xml) /$1 [NC,R=301]
Diese Regel wirkt nicht.
Bei "neu.example.tld/de/index.php" erhalte ich dieselbe URL zurück: "neu.example.tld/de/index.php".
Bei "neu.example.tld/de/index.html" erhalte ich "Not found".
2. "foo.*"
Code:
# Weiterleitung 301 */foo.php|htm|html|xml auf */foo
RewriteCond %{THE_REQUEST} (.*)\.(php|htm|html|xml) [NC]
RewriteRule (.*).(php|htm|html|xml) /$1 [NC,R=301]
# URLs ohne Endung mit PHP ausführen, wenn es eine Datei mit .php physisch gibt.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
Bei "neu.example.tld/de/kontakt.php" erhalte ich dieselbe URL zurück: "neu.example.tld/de/kontakt.php" (statt ""neu.example.tld/de/kontakt").
Und bei "neu.example.tld/de/kontakt.html" oder ""neu.example.tld/de/kontakt" erhalte ich "Not found".
Worin liegt bitte mein Fehler?
Deutet das Verhalten auf eine spezielle Konfiguration des Servers durch den Provider hin?
Über euren Rat freue ich mich. Danke.
Edit:
Nachdem ich bei meinem Webspaceprovider mehrmals nachgehakt hatte, funktioniert es jetzt mit diesen Regeln. Der Provider hat etwas an seiner Konfiguration geändert.
Leider konnte er mir nicht mitteilen was er getan hatte.
Meine Regeln waren offenbar jedenfalls korrekt.