2017-08-29 16 views
2

Ich brauche Hilfe mit der richtigen RewriteRule.htaccess RewriteRule mit Sonderzeichen in URL-Pfad

Need URL mit JSON-String am Ende:

http://hns/log/r/%7B"start":%5B55.70980850022872,37.505353142456336%5D,"end":%5B55.70980850022872,37.77039830847196%5D,"points":%5B%5B55.67529029803404,37.62070958776883%5D%5D,"method":"1","optimization":"1","center":%5B55.731512133266634,37.71615331335479%5D,"zoom":10%7D 

Umleitung zu

http://hns/log/r/index.html 

ohne URL im Browser zu ändern.

.htaccess ist:

RewriteEngine on 
RewriteBase /log/r/ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteRule ^([^/]+)$ ./index.html?catalog=$1[L] 
RewriteRule ^([A-Za-z0-9?;:,{}\"]+)$ ./index.html [L] 

Es funktioniert gut mit URLs wie: http://hns/log/r/,132a. Aber funktioniert nicht mit URLs wie: http://hns/log/r/,132a: oder mit Anführungszeichen (") oder wie JSON-Zeichenfolge.

Wie wird eine solche URL richtig umgeleitet?

+0

Wo ist diese '.htaccess' Datei? Ich nehme an, dass es in '/ logist/route/.htaccess' sein muss? Ist '/ log/r /' Ihre Abkürzung für '/ logist/route /'? Oder ein ganz anderer URL-Pfad? – MrWhite

+1

Entschuldigung, Umleitung sollte zu "http: // hns/log/r/index.html" sein. .htaccess Datei ist bei 'http: // hns/log/r' –

Antwort

0

Es sieht so aus, als ob Sie das vielleicht auf einer Windows-Maschine testen? Unter Windows OS sind die Doppelpunktzeichen (:) und die Anführungszeichen (") keine Dateinamenzeichen. Wenn also Apache versucht, die Anfrage einem Dateisystempfad zuzuordnen (was es tun wird, wenn /log/r ein Dateisystemverzeichnis ist), erhalten Sie einen Fehler (der wahrscheinlich dazu führt, dass Apache eine 403 Forbidden liefert), unabhängig von Ihrem mod_rewrite-Regex. welche diese Zeichen bereits enthält.

Andere verbotene Dateinamen Zeichen unter Windows: \, /, :, *, ?, ", <, >, |.

Wenn Sie dies unter Windows benötigen, müssen Sie Ihre URL-Struktur ändern. z.B. Verwenden Sie PATH_INFO oder eine Abfragezeichenfolge.

Ihr vorhandener Code sollte jedoch bereits auf einem Linux-Computer für URLs des Formats http://hns/log/r/,132a: (mit einem Doppelpunkt) oder mit Anführungszeichen (") funktionieren.

http://hns/log/r/%7B"start":%5B55.70980850022872,37.505353142456336%5D,"end":%5B55.70980850022872,37.77039830847196%5D,"points":%5B%5B55.67529029803404,37.62070958776883%5D%5D,"method":"1","optimization":"1","center":%5B55.731512133266634,37.71615331335479%5D,"zoom":10%7D

jedoch der Code geschrieben wird für JSON-Strings der oben angegebenen Form nicht funktionieren, weil Sie alle notwendigen Zeichen nicht enthalten sind. Ihnen fehlen [, ] und . (Punkt/Punkt). Beachten Sie, dass das RewriteRuleMuster mit dem% -decodierten URL-Pfad übereinstimmt. Also, soll dies wie folgt aus geschrieben werden:

RewriteRule ^([A-Za-z0-9?;:,{}"\[\].]+)$ index.php [L] 

Beachten Sie auch, habe ich entfernt, um den ./ Präfix auf der RewriteRuleSubstitution. Vorfixierung mit ./ ist nicht erforderlich (und nicht streng korrekt). Wenn vorangestellt ./ mod_rewrite sieht einfach die Substitution als relativ (dh es beginnt nicht mit einem Schrägstrich oder Schema + Hostname) und wird einfach das Verzeichnis-Präfix anwenden. In diesem Fall lautet der resultierende URL-Pfad /log/r/./index.php - dies wird jedoch vom OS korrekt gelöst und "funktioniert".

+1

Danke, große Antwort! –