Sven Rautenberg: .htaccess: AddType in Unterverzeichnis überschreiben

Beitrag lesen

Wenn Du die Seiten sowieso neu gestaltest, was spricht dann gegen *.php und *.shtml?

Die Seite ist relativ gut in Suchmaschinen vertreten (täglich mindestens 400 Besucher über Suchmaschinen), außerdem sind viele Unterseiten direkt von anderen Seiten verlinkt. Deshalb möchte ich die ganzen Links nicht ins Leere laufen lassen oder umlenken. Ist ja rein theoretisch auch kein Problem, wenn nicht das Testen und Programmieren im laufenden Betrieb wäre...

URL-Rewriting ist dein Freund (sofern das mit deinem Webspace geht). Es gibt zum Glück ein Beispiel für dein Problem im Guide zu mod_rewrite:
---schnipp---
Backward Compatibility for YYYY to XXXX migration

Description:
How can we make URLs backward compatible (still existing virtually) after migrating document.YYYY to document.XXXX, e.g. after translating a bunch of .html files to .phtml?
Solution:
We just rewrite the name to its basename and test for existence of the new extension. If it exists, we take that name, else we rewrite the URL to its original state.

#   backward compatibility ruleset for
#   rewriting document.html to document.phtml
#   when and only when document.phtml exists
#   but no longer document.html
RewriteEngine on
RewriteBase   /~quux/
#   parse out basename, but remember the fact
RewriteRule   ^(.*).html$              $1      [C,E=WasHTML:yes]
#   rewrite to document.phtml if exists
RewriteCond   %{REQUEST_FILENAME}.phtml -f
RewriteRule   ^(.*)$ $1.phtml                   [S=1]
#   else reverse the previous basename cutout
RewriteCond   %{ENV:WasHTML}            ^yes$
RewriteRule   ^(.*)$ $1.html
---schnapp---

Weitere englische Infos dazu: http://httpd.apache.org/docs/misc/rewriteguide.html. Doku zu mod_rewrite: http://httpd.apache.org/docs/mod/mod_rewrite.html

Warnung am Anfang: "Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo."  ;)

- Sven Rautenberg