Ich benutze mod_rewrite, um URLs wie diese umzuschreiben:
http://example.com/1,2,3,4/foo/
Auf diese Weise in .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Es funktioniert einwandfrei, außer wenn "1,2,3,4" in eine Zeichenfolge mit mehr als 255 Zeichen umgewandelt wird, gibt Apache "403 Forbidden" zurück.
foo.php?id=1,2,3,4
Selbst mit einer sehr langen ID-Zeichenfolge ist ein direkter Besuch kein Problem. Dies ist jedoch keine Option für mich.
Gibt es Apache oder eine andere Einstellung, die ich anpassen sollte?
UPDATE : Ich habe RewriteLog mit RewriteLogLevel 9 aktiviert. Mit einer kurzen ID-Zeichenfolge werden mehrere Zeilen in meiner Protokolldatei angezeigt. Wenn die ID-Zeichenfolge jedoch größer als 255 Zeichen ist, wird nichts protokolliert (scheint, als würde mod_rewrite nicht einmal ausgeführt?).
Wenn Sie diese Frage interessant / hilfreich finden, stimmen Sie sie bitte hoch.
RewriteLog
und RewriteLogLevel
Sie können sehen, was abgeglichen wird und wie es tatsächlich umgeschrieben wird. Ich würde vermuten, dass nur 255 Zeichen kopiert werden $1
und dass id
der Client nicht berechtigt ist, diese zu sehen. Apache gibt die 403 zurück. Ich habe mir den Code nicht angesehen, aber es könnte sein, dass Apache manipuliert die Rückreferenz in einem festen 256-Byte-Puffer (der 256. ist für den terminierenden NULL-Wert reserviert).