2017-01-30 2 views
1

J'essaie d'obtenir la partie chemin du REQUEST_URI, sans les paramètres de requête. Je dois le faire en SSI brut, sans PHP ou quoi que ce soit.Comment obtenir la variable SSI REQUEST_URI sans paramètres de requête

Si je fais quelque chose comme <!--#echo var="REQUEST_URI" -->, cela produira le chemin d'accès plus les paramètres de requête, donc si l'URL du navigateur affiche http://example.com/foo.html?bar, cela retournera /foo.html?bar. Mais je dois retourner seulement /foo.html. Existe-t-il un moyen de le faire directement dans une instruction echo?

Remarque: Il doit utiliser uniquement l'uri demandé. Les chemins de fichier réels sur le serveur sont très différents et je ne peux pas les afficher.

+0

pourquoi le downvote? n'est-ce pas clair pour quelqu'un? – andi

Répondre

3

Je n'ai pas en cours d'exécution avec nginxSSI autour, donc je suis juste deviner ici. Mais peut-être que vous pouvez essayer d'utiliser une expression régulière pour extraire ce que vous voulez. Peut-être quelque chose comme ceci:

<!--# if expr="$REQUEST_URI = /(.+)\?.*/" --> 
    <!--# echo var="1" --> 
<!--# endif --> 

Je ne suis pas sûr de la \ avant la ?.

+0

merci, cela a fonctionné! – andi

+0

cool. Aviez-vous besoin du '\' pour échapper au '?' à la fin? – mofoe

+0

oui, j'ai échappé au point d'interrogation. – andi

1

Vous pouvez essayer d'utiliser la place DOCUMENT_URI variables:

<!--#echo var="DOCUMENT_URI" --> 

SCRIPT_NAME semble fonctionner aussi:

<!--#echo var="SCRIPT_NAME" --> 
+0

merci, mais '' renvoie l'URI du serveur, pas l'URI que l'utilisateur a tapé dans son navigateur (nous avons quelques réécritures nginx qui rendent ces valeurs différentes). Et '' renvoie juste '(aucun)'. – andi

+0

je vois. bizarre que 'SCRIPT_NAME' affiche' (none) '. Avez-vous essayé 'PATH_INFO' (une autre variable CGI)? – mofoe

1

Ce code fonctionne pour moi:

<!--#if expr="$REQUEST_URI = /([^?]+)\?.*/" --> 
    <!--#set var="URL_WITHOUT_QUERY_STRING" value="$1" --> 
    <!--#echo var='URL_WITHOUT_QUERY_STRING' --> 
<!--#endif -->