Question

Je veux tout simplement pas utiliser esperluette dans mon URL, je peux passer esperluette plus bas dans mon système lorsqu'un fichier est demandé. Le problème est traite Apache avec différemment. Je ne sais pas comment

Je l'ai déjà réécris le fichier demandé à index.php? Url = 1 $ pour que je puisse voir ce qu'il était, mais si elle a une esperluette là-dedans, il ne peut pas continuer au-delà, il!

comment puis-je l'esperluette ou la transformer en elle l'égale hexagonale (% 26)?

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

La solution

La bonne façon d'échapper esperluette dans une chaîne de requête modifiée par mod_rewrite est

%2526

si elle est en cours de traitement par php.

Lorsqu'Apache réécrit, il est tourné de %2526 à %26 qui php convertit ensuite en & et stocke dans la variable de requête.

En utilisant la règle de réécriture de B fonctionne aussi, mais tous les signes plus dans le paramètre restent des signes plus en php.

Le exemple du monde réel que je devais faire face:

/group/Simon+%26+Garfunkel

Avec B Récrit à

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

et en php vous obtenez

$group="Simon+&+Garfunkel";

quand vous vouliez

$group="Simon & Garfunkel"

B dont vous avez besoin

/group/Simon%20%26%20Garfunkel

qui fonctionne très bien.

sans B vous obtenez

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

et vous vous retrouvez avec

$group="Simon ";

parce que la & divise les chaînes de requête.

Mais si vous double évasion

/group/Simon+%2526+Garfunkel

Récrit à

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

et vous vous retrouvez avec

$group="Simon & Garfunkel";

comme prévu.

Si l'URL n'analysé par mod_rewrite dans une « URL propre », alors nous pouvons utiliser %26 très bien.

Autres conseils

1er assurez-vous de l'url construisiez ont échappé et symbole% 26 il est donc pas une esperluette quand il arrive à votre serveur. puis dans la règle de réécriture ajouter la balise B de sorte qu'il ne sera pas le reconvertir au &:

RewriteRule ^ (. *) Index.php $? Url = $ 1 [B, QSA, L]

Cette balise B a sauvé mes fesses au bout de 2 jours d'essayer différentes règles de réécriture.

Ajouter

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

Pour vos règles de réécriture.

Essayez de mettre cette règle ci-dessus vôtre:

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

En outre, si vous voulez envoyer au navigateur une redirection avec l'esperluette dans l'URL, vous pouvez ajouter le [NE] drapeau à la fin de la RewriteRule.

RewriteRule ^/(.*) /index.php?p=yourpage_\%26_something_else [NC,NE,R=301,L]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top