2016-07-22 32 views
0

Ich habe einige alte URLs, die ich weitergeleitet werden muss, leider enthalten einige von ihnen Leerzeichen. Ich leite sie auf mein redirect.php Skript um, aber aus irgendeinem Grund, wenn die URL Leerzeichen enthält oder , in der URL nach der Umleitung dieses% 20 wiederholt unbegrenzte Male. Dies scheint nur jetzt zu geschehen, wenn wir den Server auf HTTPS umgestellt haben, wenn er auf einer http-Subdomain läuft oder auf meinem lokalen es richtig funktioniert..htaccess-Weiterleitung zeigt mehrere% 20, wenn die URL Speicherplatz auf HTTPS enthält

Meine Regel ist:

RewriteRule ^/?(gallery\.php)(.*) /redirect.php$2 [R,L]

Das funktioniert richtig:

gallery.php?place=name ->redirect.php?place=name

Aber dies geschieht, wenn URL Leerzeichen enthält:

gallery.php?place=long%20name ->

redirect.php?place=long%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name

Ich versuchte [B] und [NE] Flaggen aber keinen Erfolg hinzufügen. Gibt es etwas, was mir fehlt?

UPDATE 1: Um andere Regeln in Htaccess auszuschließen, habe ich ein neues Beispiel erstellt. Ich habe leeres Verzeichnis /test/, innen ist leer Datei /test/index.php und /test/.htaccess-Datei, die enthält:

RewriteEngine On 
RewriteRule ^/?(index\.php)(.*) /$2 [NE,R,L] 

Das ist alles. Dennoch ist das Verhalten seltsam, zB: /test/index.php?a=xy funktioniert wie erwartet, aber /test/index.php?a=x%20y wiederholt das% 20-Zeichen.

+0

Interessant, es sollte funktionieren. Es funktioniert für mich mit Ihrem genauen Code, mit SSL. Haben Sie andere Umschreibungen/Weiterleitungen in Ihrem .htaccess? Wenn das Ganze in Ihrer Frage gepostet wird, könnte das vielleicht etwas Licht ins Dunkel bringen. – Vrac

+0

@Vrac Ich habe meine Frage aktualisiert und Live-Beispiel hinzugefügt – Ziki

+0

Kontrollieren Sie diesen Server? Setzen Sie 'LogLevel alarm rewrite: trace6' in httpd.conf und beenden Sie das Apache-Fehlerprotokoll. – Vrac

Antwort

0

Am Ende habe ich es geschafft, das Problem zu umgehen, indem ich die .htaccess-Regeln neu ordnete. Also mache ich alle Weiterleitungen von HTTP zu meinem Redirect-Skript, das auch auf HTTP ist. Dieses Skript löst dann die korrekte neue URL auf, die bereits auf SSL ohne Leerzeichen vorhanden ist, und leitet das Skript dann dorthin um. Zum Glück sind alle alten URLs auf HTTP, daher reicht es aus, dass dieser Parameter nicht auf SSL weitergeleitet wird.

Auch das Flag [NE] ist hilfreich beim Umleiten von URLs mit , da es verhindert, dass das Prozentzeichen in der neuen URL weiter codiert wird.