Ja, so etwas kann man machen, aber nicht ganz so, wie Sie es tun. Sie müssen nur die richtigen Servervariablen verwenden.
RewriteCond ^%1%2%3%4-%{REQUEST_FILENAME} -d
Das Problem bei dieser Richtlinie ist, dass REQUEST_FILENAME
ist ein absoluter Dateisystempfad. Dies prüft also effektiv, ob ^2030113111-/home/user/public_html/foldername
ein gültiges Verzeichnis ist - was fehlschlagen wird. Die TestString
ist auch ein String ist kein regulärer Ausdruck, so dass die ^
Vorwahlen werden auch Dinge kaputt machen.
Stattdessen könnten Sie etwas tun wie:
RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 -d
RewriteRule (.+) - [L]
Wo $1
ist der URL-Pfad, der mit der RewriteRule
Muster . Die RewriteRule
Muster wird zuerst verarbeitet, bevor die RewriteCond
Richtlinien, die ihr vorausgehen.
Um zu testen, welches Verzeichnis wir überprüfen, können Sie dies einer Umgebungsvariablen zuweisen und in Ihrem Skript überprüfen. Also, zum Testen:
RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 (.*)
RewriteRule (.+) - [E=DIRECTORY_CHECKING_FOR:%1,L]
Untersuchen Sie die DIRECTING_CHECKING_FOR
Umgebungsvariable in Ihrem Skript sollte so etwas anzeigen wie: /home/user/public_html/2030113111-foldername
abhängig von der Struktur Ihres Dateisystems.
Beachten Sie, dass %1
entspricht der zuletzt übereinstimmend Gruppe in einer vorhergehenden CondPattern (nicht unbedingt die unmittelbar darüber liegende, wenn es keine passenden Gruppen gibt). Also, die %1
im RewriteRule
Substitution entspricht der (.*)
(der gesamte "Verzeichnisname", der geprüft wird). Während %1
im RewriteCond
TestString mit dem ersten Oktett der IP-Adresse übereinstimmt.