2009-07-11 2 views
0

J'ai été nourri à la cuillère de ce fichier htaccess de Gumbo et j'en suis reconnaissant car j'ai beaucoup appris. Cependant, je fait quelques changements, ils sont revenus en arrière et a réussi à faire quelques petits changements encore, il fonctionne 80%, mais il y a un cas où cela ne fonctionne pas:Suppression des caractères supplémentaires générés lors de la réécriture

Si je tape dans http://www.example.com/view.php?t=45re il récrit avec succès mais il le fait dans l'URL **? t = ** 45re je ne peux pas voir comment cela se passe. Anymore aide grandement apprécié.

# REWRITE DEFAULTS 
RewriteEngine On 
RewriteBase/

# /view.php?t=h5k6 externally to /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$ 
RewriteRule ^view\.php$/[L,R=301] 

# /h5k6 internally to /view.php?t=h5k6 
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L] 

Répondre

1

Je pense que vous voulez dire this post. Et je dois admettre que j'ai oublié la requête vide dans la substitution pour la surcharger, comme Vinko déjà mentionné.

Donc, essayez ceci:

# /view.php?t=h5k6 externally to /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$ 
RewriteRule ^view\.php$ /%2? [L,R=301] 

# /h5k6 internally to /view.php?t=h5k6 
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L] 

Le %2 est un backreference le match du deuxième groupe du motif de la directive RewriteCond correspondante. Donc %2 sera dans ce cas le match de ([^&]+) dans ^([^&]*&)*t=([^&]+)&?.*$.

+0

Heh. Je l'ai eu bien, mais j'ai supprimé les parties que je ne comprends pas. Je ne fournirai pas non plus de liens vers la question originale. :-) –

+0

Pour ma défense, je suis un noob comme si vous étiez tous les deux à un moment donné. Btw, je n'ai pas supprimé parce que je n'ai pas compris, je l'ai supprimé parce que j'essayais d'autres choses que je pensais pouvoir travailler. :) – Abs

+0

Cela fonctionne très bien maintenant. Peut-être que si je supprime ceci ...;) – Abs

1

Ne sachant pas votre cas, ni ce que Gumbo vous a dit, de ce que je peux recueillir de votre question (vous voulez que la chaîne de requête ne se transmet pas lors de l'extérieur redirigeant), vous pouvez soit

RewriteRule ^view\.php$ /? [L,R=301] 

note extra? ou

RewriteRule ^view\.php$/[L] 

supprimer la redirection externe et d'utiliser un interne.

+0

J'ai essayé les deux. Le premier, redirigera vers la page d'accueil avec rien après le "/". La deuxième redirigera également vers la page d'accueil mais affichera toujours la page et la chaîne de requête "/view.php?t=3ew". Gumbo, je pense qu'il y avait un "/% 2" - je n'étais pas sûr de ce que c'était, alors j'ai fait quelques changements et j'ai fait empirer les choses de quelle façon! – Abs

+0

Oui, ne supprimez pas les parties de ce qui fonctionne juste parce que vous ne les sous-estimez pas !!! Vous auriez pu demander "Que signifie le% 2 ici?" avant de le supprimer! : P –