2016-11-14 3 views
0

Haben Sie einen Client, der viele Bezeichner hat, die/s in ihnen haben. Wir verwenden diese IDs in der URL. (Warum ihre Software solche Sonderzeichen in SKU-Nummern zulässt, ist eine Frage für einen anderen Tag.)IE und Edge konvertieren% 2F in% 252F, wenn geklickt wird

Verwendung von Apache 2.4, AllowEncodedSlashes NoDecode ist gesetzt und funktioniert einwandfrei.

Auf bestimmten Client-Computern in IE und Edge (wenn das Problem vorhanden ist, ist es in beiden vorhanden), wenn der Link angeklickt oder sogar in die Adressleiste eingefügt wird, können Sie die% 2F in% 252F ändern .

Auf diesen Computern funktionieren Chrome und Firefox gut.

Beispiel-URL: (proper)

https://www.grandbrass.com/item/bb0-5%2F8x4%2F36/balls-round_solid_turned_metal_balls/

Wird: (falsche)

https://www.grandbrass.com/item/bb0-5%252F8x4%252F36/balls-round_solid_turned_metal_balls/

Bei den Maschinen diese konsistent ist.

AFAIK das geschieht sofort im Browser.

Mein Verdacht ist, dass dies etwas mit der Seitencodierung und den Spracheinstellungen des Clients zu tun hat, oder so etwas, aber ich kann nicht einmal anfangen zu erraten, was das Problem sein könnte.

Hier ist ein Link zu einem (geringe Qualität) Video, das zeigt, dass es passiert. https://recordings.join.me/oM6XCRZ_0kOYuEn9OjtWAg

** UPDATE **

Es scheint, dass es etwas los mit mod_rewrite auf dem Server ist. Warum es nur Auswirkungen auf Edge und IE auf einigen Computern hat, ist nicht klar, aber ich konnte es in Chrome duplizieren.

Es scheint, dass, wenn eine URL, die einen% 2F enthält, eine mod_rewrite Regel auslöst, dann wird% 2F durch den% 252F ersetzt.

Zum Beispiel gibt es eine Regel einen Schrägstrich hinzufügen, wenn einer fehlt:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !\..+$ 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [R=301,L] 

So funktioniert das: https://www.grandbrass.com/item/crb1-1%2F8x8/checkrings-plated_steel_checkrings/

Diese (Anmerkung fehlende Schrägstrich) werden nicht: https://www.grandbrass.com/item/crb1-1%2F8x8/checkrings-plated_steel_checkrings

Was ich am Ende mit in dem zweiten Fall ist (Anmerkung hinzugefügt Strich und übersetzte% 2F): https://www.grandbrass.com/item/crb1-1%252F8x8/checkrings-plated_steel_checkrings/

Das schafft Probleme, wie in PHP ich am Ende mit crb1-1 // F8x8 als Wert, der kein gültiger Artikelcode ist.

Antwort

0

Das Problem stellte sich heraus, dass, wenn die URL in der HREF% 2F enthielt, die% 2F von mod_rewrite neu codiert wurde, wenn eine Rewrite-Regel ausgelöst wurde.

Das Hinzufügen von "NE" zu der Regel behob das Problem. Zum Beispiel:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !\..+$ 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [**NE**,R=301,L] 

bin ich immer noch nicht in der Lage zu erklären, warum eine Untergruppe von Windows-Rechnern laufen IE oder Edge konsequent eine Regel ausgelöst, Chrome, Firefox, etc. nicht.

0

Haben Sie versucht, die URL zu aktualisieren aus: https://www.grandbrass.com/item/bb0-5%2F8x4%2F36/balls-round_solid_turned_metal_balls/

zu: https://www.grandbrass.com/item/bb0-5 8x4 36/Bälle-round_solid_turned_metal_balls/

Ich denke, das funktionieren könnte.Da die Systeme, in denen es bereits funktioniert, Platz auf% 2F codieren werden und hoffentlich, wo das System Doppelcodierung% 2F ist, dies einmal tun könnte, könnte dies das Problem lösen. Dies ist keine richtige Lösung, könnte aber funktionieren. Probieren Sie es einfach aus.

Auch ich würde vorschlagen, einen Blick auf die Registerkarte Netzwerke in den Entwicklertools zu werfen. Wenn Sie auf diese URLs von dem System klicken, auf dem das Problem besteht, senden sie die richtige URL an den Apache?

Alternativ können Sie dies in Apache mit einer Umleitung umgehen.

+0

Ich habe das versucht und es hat nicht funktioniert. % 2F ist kein Leerzeichen, es ist ein Schrägstrich. Es funktioniert auf den meisten Systemen, nur nicht auf einigen IE- und Edge-Browsern. AFAIK es im Browser tun, nicht rund um den Server stolpern. –

Verwandte Themen