WordPress-Site fehlen Bilder nach htaccess Änderung

Oct 29 2020

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

3 MrWhite Oct 29 2020 at 18:12

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 /quotesUnterverzeichnis 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 /quotesdirekt 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 /quotesdie URL zu Ihren statischen Ressourcen hinzufügen. Dadurch wird das /quotesUnterverzeichnis jedoch für alle verfügbar, die sich Ihre HTML-Quelle ansehen. Wir müssten auch die Umleitungsanweisung in der /quotes/.htaccessDatei ä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 .htaccessStammdatei , schreibt jede Anforderung für eine statische Ressource (Bild, CSS oder JS - Datei) zu dem /quotesUnterverzeichnis , 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 /quotesInstallation 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/.htaccessDatei , 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).