2010-07-18 7 views
0

J'essaie de rendre mes pages conviviales.Page HTAccess Rediriger un problème avec & signer

J'ai un lien dans ma page.

http://abc.com/test.php?Section=pages&title=feedback+%26+enquiry 

il fonctionne très bien et le titre a une valeur « demande la rétroaction & ». J'ai changé lien ci-dessus à:

http://abc.com/pages/feedback+%26+enquiry.htm 

J'ai écrit le code htaccess comme:

Options +FollowSymLinks 

RewriteEngine on 
RewriteRule index.htm$ index.php 
RewriteRule ^(.*)/(.*)\.htm$ /test.php?Section=$1title=$2 [R] 

i attend le même résultat, mais je fus surpris de voir l'erreur que le titre est d'avoir valeur ou « Feedbac "et nouvelle variable" enquête "étant créé avec la valeur" "

Je suis incapable de trouver l'erreur. Je suppose que c'est l'erreur de conversion htaccess. alors comment puis-je le faire fonctionner?

J'ai essayé d'effectuer un retour arrière mais j'ai rencontré une erreur interne du serveur. Mon nouveau code htaccess:

Options +FollowSymLinks 

RewriteEngine on 
RewriteRule index.htm$ index.php 
RewriteRule ^(.*)/(.*)\.htm$ index.php?Section=$1&title=$2 [R,B] 

Ma version Apache est: 2.2.4

+0

Goutte caractères de ponctuation dans le composant de requête, ils ont l'air laid et causer des problèmes comme vous avez . A moins que vous ne vous attendiez à ce qu'il y ait à la fois des titres "feedback & enquiry" et "feedback"! enquiry' (auquel cas vous aurez toujours besoin de quelque chose suffixy pour désambiguïser «u & i» et «u + i») – msw

+0

votre suggestion de laisser tomber & et! est bon mais que faire si de toute façon nous devons le faire? nous ne pouvons pas l'éviter tout le temps – KoolKabin

Répondre

0

Si vous utilisez Apache 2.2, vous pouvez utiliser le drapeau B pour échapper à tout dans votre URL des backreferences réécrite:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B] 

Sinon, dans Apache 2.0, vous pouvez essayer d'utiliser la RewriteMap interne escape:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=${escape:$1} [R] 
+0

désolé il informe les derniers changements car j'ai eu une erreur sur mon URL complète. J'ai édité mon article et j'ai écrit mon URL complète car j'ai eu une erreur interne du serveur en testant votre script avec les options [B] – KoolKabin

+0

@KoolKabin: Si vous gardez le 'R', vous devez vous assurer que votre remplacement est'/index.php? index.php? Section = $ 1 & title = $ 2 [R, B] ', mais vraiment je ne pense pas que vous voulez le' R' plus? En outre, que disent vos journaux d'erreurs à propos de l'erreur interne du serveur? –

+0

Je ne reçois aucun message d'erreur interne du code d'erreur.Que le webmaster a configuré pour ne pas montrer le code d'erreur/message. J'ai essayé avec les deux options mais les deux ont échoué. Garder l'échappement enverra le titre = "" – KoolKabin

0

from the mod_rewrite doc:

Apache doit Unescape URL avant de les cartographier, de sorte que (1 références arrières $) seront sans échappement au moment où ils sont appliqués.

afin que votre feedback+%26+enquiry.htm est réécrite à test.php?title=feedback+&+enquiry, qui, naturellement, donne le résultat que vous voyez.

vous pouvez éviter les références arrières étant sans échappement en ajoutant la 'B'(échapper à des backreferences) rewrite drapeau à votre RewriteRule:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B] 
+0

désolé il informe les derniers changements comme j'ai eu l'erreur sur mon URL complète. J'ai édité mon article et j'ai écrit mon URL complète car j'ai eu une erreur de serveur interne en testant votre script avec les options [B] – KoolKabin

+0

assurez-vous que vous n'avez pas d'espace dans le '[R, B]', ie. * not * '[R, B]'. –

+0

euh .... je suis sûr que j'ai sûrement un espace blanc entre eux, mais toujours l'erreur – KoolKabin