Verhindern Sie, dass das Administratorverzeichnis mithilfe von Regeln zum Umschreiben von URLs umgeleitet wird

Oct 30 2020

Das folgende Setup funktioniert sehr gut, aber wenn ich versuche, dorthin zu gelangen https://example.com/quotes/wp-admin, leite ich weiter, https://example.com/wp-adminwas nicht das ist, was ich tun möchte, da ich mich jetzt nie auf der /quotes/WordPress-Website anmelden kann .

Ich habe versucht, dies zu den Anführungszeichen hinzuzufügen, .htaccessaber es hilft nicht:

RewriteCond %{REQUEST_URI} !^/(wp-admin/.*)$

Ich habe auch versucht, die folgende Zeile zu einer .htaccessDatei im wp-adminOrdner hinzuzufügen, aber es hat auch nicht funktioniert.

RewriteEngine Off

Stammdatei .htaccess:

# Rewrite any URLs that contain a language code prefix to the subdirectory
RewriteRule ^[a-z]{2}/ quotes%{REQUEST_URI} [L]


# Rewrite any request for a static resource that does not exist (in the root)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(css|js|png|jpg|webp|gif|svg|ttf|woff2)$ quotes%{REQUEST_URI} [L]


# BEGIN rlrssslReallySimpleSSL rsssl_version[3.3.5]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>


# END WordPress

/quotes .htaccess Datei

# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for static resources
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|webp|gif|svg|ttf|woff)$ RewriteRule (.*) /$1 [R=301,L]


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /quotes/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /quotes/index.php [L]
</IfModule>
# END WordPress

Antworten

2 MrWhite Oct 30 2020 at 17:00

Ich habe versucht, dies zu den Anführungszeichen hinzuzufügen, .htaccessaber es hilft nicht:

RewriteCond %{REQUEST_URI} !^/(wp-admin/.*)$

Die REQUEST_URIServervariable enthält den vollständigen URL-Pfad, daher sollte dies sein /quotes/wp-admin(dh Regex !^/quotes/wp-admin- ablaufender Schrägstrich absichtlich weggelassen). Folglich würde die obige Ausnahme fehlschlagen und die Umleitung würde immer noch auftreten.

Sie können auch .phpdie Liste der zu vermeidenden Erweiterungen ergänzen . Oder schließen Sie sogar Anfragen aus, die einfach so aussehen, als hätten sie eine Dateierweiterung - vorausgesetzt, Ihre Seiten-URLs haben keine "Dateierweiterungen".

Zum Beispiel in /quotes/.htaccess:

# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for wp-admin and static resources
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/quotes/wp-admin
RewriteCond %{REQUEST_URI} !\.\w{2,4}$ RewriteRule (.*) /$1 [R=302,L]

\.\w{2,4}$- Dies setzt voraus , dass Dateiendung eines Punkt bestehen , gefolgt von zwischen 2 und 4 Zeichen im Bereich von a-z, A-Z, 0-9oder _(Unterstrich) und das Ende des URL-Pfades. \wist eine Kurzzeichenklasse, die diesen Zeichenbereich darstellt.

Sie können auch noch einen Schritt weiter gehen und verhindern, dass Anforderungen, die einer physischen Datei zugeordnet sind, umgeleitet werden, obwohl die oben genannten Ausnahmen für !^/quotes/wp-admin/und !\.\w{2,4}$bereits alles abfangen sollten . Zum Beispiel:

# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for wp-admin, static resources and any other files
RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^/quotes/wp-admin RewriteCond %{REQUEST_URI} !\.\w{2,4}$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /$1 [R=302,L]

Dateisystemprüfungen (wie z. B. -f) sind relativ "teuer" und sollten daher vermieden werden, wenn dies nicht unbedingt erforderlich ist.

Ich habe auch versucht, die folgende Zeile zu einer .htaccess-Datei im Ordner wp-admin hinzuzufügen, aber es hat auch nicht funktioniert.

RewriteEngine Off

Dies hätte funktionieren sollen - um zumindest die durch ausgelöste Umleitung zu verhindern .htaccess. (Obwohl dies auch ein Umschreiben verhindern würde, ist dies möglicherweise nicht wünschenswert?)

Da es sich jedoch um eine (permanente) 301-Weiterleitung handelt, wurde sie vom Browser (dauerhaft) zwischengespeichert. Sie müssen also vor dem Testen sicherstellen, dass der Browser-Cache geleert wird.

Testen Sie mit 302 (temporären) Weiterleitungen, bis alles wie beabsichtigt funktioniert, um mögliche Caching-Probleme zu vermeiden.


Nebenbei: In Ihrer Root- .htaccessDatei:

# Rewrite any request for a static resource that does not exist (in the root)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(css|js|png|jpg|webp|gif|svg|ttf|woff2)$ quotes%{REQUEST_URI} [L]

Kleiner Punkt, aber Sie haben woff2hier verwiesen , aber woffin Ihrer /quotes/.htaccessDatei. Idealerweise sollten diese gleich sein. Sie können dies verallgemeinern, wie oben für die /quotes/.htaccessDatei erwähnt. Zum Beispiel:

# Rewrite any request for a static resource that does not exist (in the root)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.\w{2,4}$ quotes%{REQUEST_URI} [L]