dedlfix: Schönere URLs mit mod_rewrite des Apache

Beitrag lesen

echo $begrüßung;

RewriteRule ^/chooselanguage(?.*)?$ /chooselanguage.php$1

Das Umleiten auf /... brachte mir neulich eine Endlosschleife ein. Der umgeschriebene interne Request wird aus dem aktuellen Verzeichnis hinaus nach "absolut sonstwo" geschickt und der Rewrite-Prozess beginnt neu. Vielleicht ist das aber im virtuellen Host anders als bei mir in der .htaccess.

RewriteRule wertet den Query-String nicht aus. Wenn du dich darauf beziehen möchtest musst du eine RewriteCond verwenden. Ansonsten gibt es das Flag [QSA], mit dem der QS an die umgeschriebene URL angehängt wird.

Jetzt möchte ich aber noch einen Zugriff auf die URL /chooselanguage.php von außen verhindern. Die Inhalte von chooselanguage.php sollen nur über die URL /chooselanguage erreicht werden können, und nicht direkt.
Wie realisiere ich das?

Mit

<Files *.php>
  deny from all
</Files>

geht es nicht, da diese Regel auch auf den internen Request wirkt, und auch /chooselanguage ein 403 bekommt. Meine einzige Idee ist, in /chooselanguage.php REQUEST_URI mit SCRIPT_FILENAME zu vergleichen *) und daraufhin einen 403er header() zurückzugeben.

*) Dabei muss der QUERY_STRING beachtet werden. Am besten ist es wohl $_SERVER['SCRIPT_FILENAME'] mit parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) zu vergleichen.

echo "$verabschiedung $name";