WordPress-Site fehlen Bilder nach htaccess Änderung
Ich habe eine WordPress-Installation im Stammverzeichnis und eine weitere in einem Unterordner im Stammverzeichnis.
Normalerweise würde die URL folgendermaßen aussehen:
https://example.com/quotes/us/some-url
aber ich wollte 'Anführungszeichen' aus der URL entfernen, so dass es einfach so endete:
https://example.com/us/some-url
Dank eines anderen Stack-Overflow-Benutzers konnte ich das mit dem folgenden htaccess-Code zum Laufen bringen, aber ich wusste nicht, dass die Bilder jetzt nicht angezeigt werden, und ich erhalte für alle einen 404-Fehler. Dies ist die Stammdatei .htaccess
RewriteRule ^[a-z]{2}/ 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>
# END rlrssslReallySimpleSSL
# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<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
und der Unterordner 'Anführungszeichen' .htaccess sieht so aus
RewriteCond %{ENV:REDIRECT_STATUS} ^$
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
Ich erhalte einen 404-Fehler für diesen Pfad
https://example.com/wp-content/themes/theme_quotes/style.css?ver=1.0.0
. Es wird also in der Root-Installation gesucht, wo dieses Thema nicht vorhanden ist, da es nur in der Installation des Unterverzeichnisses vorhanden ist
Derzeit schreiben wir Anfragen nur dann in das /quotes
Unterverzeichnis um, wenn der URL-Pfad mit einem aus zwei Buchstaben bestehenden Sprachcode beginnt, da dies das einzige ist, was die URLs zwischen den beiden WordPress-Installationen zu unterscheiden scheint. Dies bedeutet jedoch, dass URLs zu Ihren statischen Ressourcen (wie oben), die nicht das Sprachcode-Präfix haben (und nicht /quotes
direkt auf das Unterverzeichnis verweisen ), nicht neu geschrieben werden und daher mit einem 404 fehlschlagen.
Dies könnte möglicherweise in WordPress behoben werden, indem Sie /quotes
die URL zu Ihren statischen Ressourcen hinzufügen. Dadurch wird das /quotes
Unterverzeichnis jedoch für alle verfügbar, die sich Ihre HTML-Quelle ansehen. Wir müssten auch die Umleitungsanweisung in der /quotes/.htaccess
Datei ändern, um zu verhindern, dass diese Anforderungen zurück zum Stammverzeichnis umgeleitet werden. BEARBEITEN: Eigentlich sieht es so aus, als ob dies bereits bei Ihren Bildern passiert, die bereits den vollständigen ("richtigen") URL-Pfad enthalten.
Was wir ... tun könnten im .htaccess
Stammdatei , schreibt jede Anforderung für eine statische Ressource (Bild, CSS oder JS - Datei) zu dem /quotes
Unterverzeichnis , wenn es nicht in der Wurzel vorhanden ist . Zum Beispiel:
# 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)$ quotes%{REQUEST_URI} [L]
# BEGIN WordPress
# : (Remainder of existing .htaccess file goes here)
Dies bedeutet, dass, wenn Sie in beiden Installationen zwei statische Ressourcen mit demselben Namen (demselben Basis-URL-Pfad) haben, die in der Root-Installation "gewinnt".
Beachten Sie, dass dies ein "blindes" Umschreiben ist. Wenn in keiner der beiden Installationen eine bestimmte statische Ressource vorhanden ist, wird der 404 immer in der /quotes
Installation angezeigt. Es gibt jedoch keine Möglichkeit, dies wirklich zu beheben, da die URL-Pfadstruktur ein mehrdeutiges Element enthält.
UND verhindern Sie in der /quotes/.htaccess
Datei , dass direkte Anforderungen für statische Ressourcen zurück zum Stammverzeichnis umgeleitet werden. Zum Beispiel:
# 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)$ RewriteRule (.*) /$1 [R=301,L]
# BEGIN WordPress
# : (Remainder of existing .htaccess file goes here)
Ich gehe davon aus, dass alle Ihre Dateierweiterungen (für statische Ressourcen) in Kleinbuchstaben geschrieben sind.
Sie müssen Ihren Browser-Cache leeren, da die Bildumleitung zurück zum Stammverzeichnis wahrscheinlich vom Browser zwischengespeichert wurde (da es sich um eine permanente 301-Umleitung handelt).