2010-08-21 10 views
0

J'ai donc une page Web qui interroge certaines données basées sur ce paramètre search.php?state=AL.Rediriger avec mod_rewrite?

Ce que je suis en train de faire est d'écrire une règle dans mon dossier .htaccess qui:

  1. traduire website.com/state/AL en search.php?state=AL
  2. Si un utilisateur demande spécifiquement search.php?state=AL puis traduire en /state/AL

J'ai accompli l'étape 1 en utilisant ceci:

RewriteRule ^state/([A-Za-z][A-Za-z]) /search.php?state=$1 [NC]

Comment puis-je accomplir l'étape 2? Je sais que je vais devoir utiliser [R, NC] pour réécrire l'URL, mais c'est là où je suis coincé.

EDIT: ne sais pas si cette question est importante, mais mes forces me webhost forment une raison d'ajouter RewriteBase / au sommet de mon dossier .htaccess.

Répondre

2

Vous souhaitez effectuer la redirection uniquement dans le cas où la demande initiale a été signalé à l'URL /search.php?state=, comme ceci:

RewriteEngine On 

# Externally redirect /search.php?state=XX --> /state/XX 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/search\.php\?state=([A-Z]{2}) [NC] 
RewriteRule^http://%{HTTP_HOST}/state/%1? [R=301,L] 

# Internally redirect /state/XX --> /search.php?state=XX 
RewriteRule ^state/([A-Z]{2}) /search.php?state=$1 [NC] 
+0

C'est exactement ce que je voulais, mais pour une raison quelconque, il ne fonctionne pas. Il affiche toujours 'search.php? State = AL' dans la barre d'adresse. –

+0

@Bob Dylan - Oui, c'est parce que j'ai bêtement oublié d'échapper au point d'interrogation. Je vais éditer la réponse. (Et j'ai oublié de tuer la chaîne de requête sur la redirection, j'ai ajouté cela aussi) –

+0

Merci qui l'a corrigé! –

0

Quelque chose comme ça ferait l'affaire:

RewriteRule ^state/([A-Za-z][A-Za-z]) /search.php?state=$1 [NC, L] 
RewriteCond %{QUERY_STRING} state=([A-Za-z][A-Za-z]) 
RewriteRule ^search\.php$ /state/%1 [R=303, NC] 
+0

Lorsque J'ai essayé celui-ci, il m'a donné une erreur de serveur interne: '500' –

Questions connexes