Mod_Rewrite QUERY_STRING
Phil
- webserver
Hallo,
auf dem Server liegen eine .htaccess und eine index.php
Inhalt .htacess:
RewriteRule ^([a-zA-Z0-9/-]*).html$ /index.php?$1 [QSA]
Inhalt index.php:
<?php echo $_SERVER['QUERY_STRING']; ?>
Rufe ich die seite ohne "index.html" auf,
also "www.example.org/"
wird mir kein QUERY_STRING ausgegeben.
bei "www.example.org/index.html"
ist der QUERY_STRING logischerweise "index"
Soweit auch klar.
Liegt in dem Verzeichniss noch eine index.html,
wird bei "www.example.org/" jedoch in der index.php (auf
die umgeleitet wurde) als QUERY_STRING "index" angegeben.
Warum?
auf dem Server liegen eine .htaccess und eine index.php
Inhalt .htacess:
RewriteRule ^([a-zA-Z0-9/-]*).html$ /index.php?$1 [QSA]
Rufe ich die seite ohne "index.html" auf,
also "www.example.org/"
wird mir kein QUERY_STRING ausgegeben.
Ja weil dein pattern nicht matcht.
bei / wird die index.php direkt aufgerufen, wenn keine index.html exstiert.
bei "www.example.org/index.html"
ist der QUERY_STRING logischerweise "index"
Soweit auch klar.
Liegt in dem Verzeichniss noch eine index.html,
wird bei "www.example.org/" jedoch in der index.php (auf
die umgeleitet wurde) als QUERY_STRING "index" angegeben.
Warum?
weil index.html Vorrang vor index.php hat, also
im Unterschied zu oben
/ auf index.html umgeleitet wird statt auf index.php
der Folgerequest wird dann von deinem Pattern erfasst.
mfg Beat
hi,
Liegt in dem Verzeichniss noch eine index.html,
wird bei "www.example.org/" jedoch in der index.php (auf
die umgeleitet wurde) als QUERY_STRING "index" angegeben.Warum?
Weil das im Webserver so als Default konfiguriert wurde: '/' => 'index.html'
Du kannst das in Deiner .htaccess anpassen, z.B. so:
DirectoryIndex /index.php?index.html
Und die Rule kannst Du auch einfacher schreiben, z.B. so:
RewriteRule ^(.*).html$ /index.php?$1.html
Genauso hab ich das bei mir gemacht,
Hotte
Du kannst das in Deiner .htaccess anpassen, z.B. so:
DirectoryIndex /index.php?index.html
Ist der DirectoryIndex von außen ermittelbar?
zb. /blablabla123.php?index.html
was ist mit DC wenn die Seite unter www.example.de/ und www.example.de/index.html erreichbar ist?
Phil
Du kannst das in Deiner .htaccess anpassen, z.B. so:
DirectoryIndex /index.php?index.html
Ist der DirectoryIndex von außen ermittelbar?
zb. /blablabla123.php?index.html
Normalerweise ist es ein Serverinterner Subrequest.
Das kannst du natürllich explizit ändern durch redirect permanent.
was ist mit DC wenn die Seite unter www.example.de/ und www.example.de/index.html erreichbar ist?
Ist DC ein Problem?
Es liegt doch an dir selbst, welche kanonische Form der Domain du propagierst.
mfg Beat
hi,
Ist der DirectoryIndex von außen ermittelbar?
zb. /blablabla123.php?index.htmlwas ist mit DC wenn die Seite unter www.example.de/ und www.example.de/index.html erreichbar ist?
Ach ich geb Dir einfach mal nen wwwLink und noch einen ohne WWW ;-)
Hier meine Konfig:
ErrorDocument 404 /cgi-bin/404.cgi
DirectoryIndex /cgi-bin/view.cgi?/index.html
RewriteEngine on
RewriteRule ^(.*).html$ /cgi-bin/view.cgi?/$1.html
Die biegt alles *.html um zum Script 'view.cgi', was die Datei selbst aus einer DB fischt und zum Browser schickt. Falls x.html nicht in der DB gefunden wird, leitet view.cgi auf 404.cgi um, das kannst Du ja auch mal einfach so aufrufen (/cgi-bin/404.cgi).
Und da ich auch mit CGI-Umgebungsvariablen arbeite, um die aktuelle Seite aus dem Link-Menu auszublenden, gibts nochn Trick in meinem CGI-Modul:
$ENV{REQUEST_URI} = '/index.html' if $ENV{REQUEST_URI} eq '/';
Alles zusammen ist ein Single-User CMS, (nur für mich) für den Fall, dass Mod_Rewrite nicht verfügbar sein sollte, kann ich die Seiten auch als Dateien im Filesystem bereitstellen, ohne dass das für den Besucher anders aussehen würde und ohne dass sich URLs damit ändern.
Hotte
Ich danke Euch!
Ist auch eigentlich logisch. Ich sah vor lauter Wald die
Bäume wohl nicht.
Gruß
Phil