2008-11-03 8 views
0

Je veux être en mesure de réécrire une URL à partir de:.htaccess Apache modrewrite

// examples 

http://example.com/location/New York, NY --> 
http://example.com/location/index.html?location=New York, NY 

http://example.com/location/90210 --> 
http://example.com/location/index.html?location=90210 

http://example.com/location/Texas --> 
http://example.com/location/index.html?location=Texas 

http://example.com/location/ANYTHING.... --> 
http://example.com/location/index.html?location=ANYTHING... 

utilisant .htaccess et mod_rewrite.

Quelqu'un sait-il comment faire?

J'ai essayé:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !location/index.html 
RewriteRule ^location/(.*)$ /location/index.html?location=$1 

Cependant, il ne passe pas la variable d'emplacement GET à la page /location/index.html lorsque vous utilisez le "url assez" (par exemple http://example.com/location/90210).

Je sais ce b/c quand je fais l'écho sur l'écran (en utilisant javascript) l'emplacement des variables GET lorsque la longue URL est utilisé, il est réglé, mais lorsque l'on utilise l'URL jolie (courte), l'emplacement GET variable est indéfinie.

+0

pourquoi le double? – Liam

+0

s'il vous plaît arrêtez de poster des doublons, postez des suivis dans vos questions précédentes – Owen

+0

ok j'ai vu que vous avez supprimé vos autres questions, s'il vous plaît ne pas poster d'autres doublons à celui-ci :) – Owen

Répondre

3

Votre dernier exemple devrait fonctionner; Je vérifie également que la condition est insensible à la casse (pour éviter que /LoCation/indeX.htmL soit analysé), termine la réécriture avec [L] (pour éviter les boucles infinies) et ajoute QSA (pour les requêtes d'ajout):

RewriteEngine on 
RewriteCond %{REQUEST_URI} !location/index.html [NC] 
RewriteRule ^location/(.*)$ /location/index.html?location=$1 [L,QSA] 

Comment lisez-vous (et écho) la variable GET de localisation? "J'utilise JavaScript pour répercuter une alerte qui imprime la variable" location "."

JavaScript s'exécute dans votre navigateur ("côté client"), par conséquent, il fonctionne avec les mêmes données que votre navigateur voit. Par exemple, si vous pointez votre navigateur sur http://www.example.com/foo/bar/, quelle que soit la réécriture que vous utiliserez sur le serveur, Javascript affichera toujours "http://www.example.com/foo/bar/" comme emplacement.

Pour accéder aux variables GET, vous avez besoin de code pour y accéder lorsque la page est générée ("côté serveur") avant d'être envoyée au navigateur. Par exemple, lorsque vous avez un serveur capable PHP, le script suivant à http://www.example.com/location/index.php et vous redirigez à travers quelque chose comme le code ci-dessus, il sera en mesure d'accéder et de travailler avec les variables GET:

<?php 
echo 'The location you entered is ' . $_GET['location'] . '.'; 
?> 

Lorsque combiné avec la réécriture, pour l'URL http://www.example.com/location/Houston,TX il affichera ceci:

The location you entered is Austin,TX. 

(bien sûr, il y a beaucoup de langues côté serveur, j'utilise PHP comme un exemple, je suis plus familier)

+0

juste une note @timmy_ je l'ai testé aussi bien et ça fonctionne bien. vous pouvez vouloir vérifier votre journal de réécriture si vous pouvez en créer un pour voir s'il y a quelque chose de spécifique à votre config qui empêche cela de fonctionner – Owen

+0

J'utilise JavaScript pour renvoyer une alerte qui imprime la variable "location". Owen, où puis-je trouver le journal de réécriture? –

+0

Malheureusement, il doit être défini dans la configuration serveur/hôte virtuel. si vous y avez accès, regardez: RewriteLog et RewriteLogLevel pour configurer un journal de réécriture – Owen

0

Juste pour réitérer, la solution p osté par Piskvor fonctionne comme prévu. Selon les commentaires à ce sujet, vous utilisez javascript pour récupérer la chaîne de requête, qui est le problème. En ce qui concerne javascript, l'URL d'origine est celle qu'il voit. Vous pouvez confirmer par vous-même rapidement:

alert(document.location.href); 

si vous avez besoin pour obtenir la valeur en javascript, je suggère d'utiliser quelque chose comme:

var regex = /location\/(.*)$/; 
var query = document.location.href.match(regex); 
alert(query[1]); 

// query[1] will contain "90210" in your example 
// http://example.com/location/90210 
Questions connexes