2010-08-31 2 views
2

J'ai un module qui doit renvoyer un URI de référence dans sa charge utile. S'il est appelé via une connexion SSL, je dois créer un URI avec le préfixe https. Je peux facilement obtenir le numéro de port de la demande, mais le problème est que l'utilisateur aurait pu choisir n'importe quel port pour SSL (et en fait cette instance particulière d'Apache commence toujours par un port SSL non standard).Comment mon module Apache 2 peut-il indiquer s'il est appelé via une requête SSL?

Tous les URI analysés dans la structure de demande ont déjà le préfixe http/https supprimé. J'envisage de recourir au champ r-> server-> defn_name, qui contient en fait le fichier conf du serveur virtuel de la requête. Si je vois que cela se termine avec httpd-ssl.conf, je peux deviner qu'il s'agit d'une connexion SSL. Il se sent toujours comme un hack, et en réalité, l'utilisateur pourrait nommer ce fichier conf quelque chose d'autre, ce qui romprait cette approche.

Une autre approche serait de lire le fichier de configuration et de trouver le port SSL VirtualHost Listen, mais je n'ai pas réussi à le faire non plus.

Il me semble qu'il me manque un moyen très simple de savoir si la requête a été faite via https, mais j'ai scanné toutes les structures disponibles à partir de request_rec et je ne vois rien d'évident.

Répondre

3

Il y a une fonction bien définie dans le fichier d'en-tête de httpd.h qui vous donnera le schéma d'une demande:

if (apr_strnatcmp(ap_http_scheme(r), "https") == 0) { 
    ssl = TRUE;  
} else { 
    ssl = FALSE; 
} 
+0

Impressionnant, merci Boris. Cela a fonctionné comme un charme. –

Questions connexes