2009-08-23 2 views
0

Ich möchte einfach kein kaufmännisches Und in meiner URL verwenden, so kann ich kaufmännische Und-Zeichen weiter unten in meinem System übergeben, wenn eine Datei angefordert wird. Das Problem ist, dass Apache anders damit umgeht. Ich weiß nicht, wiemod_rewrite Ersetzt alle Instanzen von kaufmännisches Und mit% 26 für später

Ich habe bereits die angeforderte Datei in index.php? Url = $ 1 umgeschrieben, damit ich sehen kann, was es war, aber wenn es ein kaufmännisches Und dort ist, kann es nicht weiter vorbei!

Wie kann ich dem kaufmännischen Und-Zeichen entkommen oder es in sein Hex-Gleichheitszeichen (% 26) verwandeln?

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule>` 

Antwort

1

RewriteRule ^(.*)\&(.*)$ $1\%26$2 

Um Ihre Rewrite-Regeln hinzufügen.

+0

hmm, das scheint die! -f-Bedingung von oben zu brechen und jetzt funktionieren alle externen Dateien nicht mehr auf dem Server – Supernovah

+0

Wo hast du die RewriteRule-Zeile hingelegt? –

0

Versuchen Sie diese Regel über deine setzen:

RewriteRule ^([^&]*)&(.*) $1\%26$2 [N] 
0

Außerdem, wenn Sie zurück an den Browser eine Umleitung mit dem Ampersand in der URL senden möchten, können Sie die [NE] Flagge bis zum Ende des hinzufügen RewriteRule.

RewriteRule ^/(.*) /index.php?p=yourpage_\%26_something_else [NC,NE,R=301,L] 
4

1. sicherstellen, dass die URLs Sie bauen entkommen das & Symbol% ​​26 so ist es nicht ein kaufmännisches, wenn es um Ihren Server bekommt. dann in Ihrer Rewrite-Regel fügen Sie den B-Tag, so dass es nicht konvertieren zurück in den &:

RewriteRule^(. *) $ index.php url = $ 1 [B, QSA, L]

Dieses B-Tag rettete meinen Hintern nach zwei Tagen, in denen ich verschiedene Rewrite-Regeln ausprobierte.

0

Der richtige Weg, Et-Zeichen in einer Abfragezeichenfolge von mod_rewrite geändert zu entkommen ist

%2526 

, wenn es von PHP behandelt hat wird.

Wenn Apache es umschreibt, wird es von %2526 zu %26, die dann in & konvertiert und speichert in der Abfrage-Variable.

Mit der B Rewrite-Regel funktioniert auch, aber dann alle Pluszeichen im Parameter bleiben plus Zeichen in PHP.

Die reale Welt Beispiel, dass ich zu kämpfen hatte:

/group/Simon+%26+Garfunkel 

Mit B es

group.php?group=Simon+%26+Garfunkel 

und in PHP zu

umschreibt Sie erhalten

$group="Simon+&+Garfunkel"; 

wenn Sie

wollte
$group="Simon & Garfunkel" 

Mit B benötigen Sie

/group/Simon%20%26%20Garfunkel 

der gut arbeitet.

ohne B Sie erhalten

group.php?group=Simon%20&%20Garfunkel 

und Sie am Ende mit

$group="Simon "; 

weil die & Abfrage-Strings unterteilt.

Aber wenn Sie doppelte Escape

/group/Simon+%2526+Garfunkel 

es umschreibt zu

group.php?group=Simon%20%26%20Garfunkel 

und Sie am Ende mit

$group="Simon & Garfunkel"; 

wie erwartet. Wenn die URL nicht von mod_rewrite in eine "saubere URL" geparst wird, dann können wir %26 verwenden.

Verwandte Themen