2008-10-01 10 views
10

Je tire mes cheveux sur ce qui devrait être un problème incroyablement simple. Nous exécutons WebSphere IHS (Apache) via un BigIP F5. BigIP fait la traduction https pour nous. Notre URL (modifiée pour le Web, non valide) est https://superniftyserver.com/lawson/portal. Lorsque quelqu'un tape juste cela sans la barre oblique après le portail, Apache suppose que «portail» est un fichier et non un répertoire. Quand Apache découvre ce que c'est, il envoie la redirection permanente 301. Mais comme Apache ne connaît que http, il envoie l'URL http://superniftyserver.com/lawson/portal/ ce qui crée des problèmes.mod_rewrite pour un problème de slash traînant

J'ai donc essayé un changement au niveau du serveur httpd.conf pour mod_rewrite, c'est l'une des dizaines de combinaisons que j'ai essayées.

RewriteEngine sur RewriteRule ^/lawson/portail (. *)/Lawson/portal/1

$

J'ai aussi essayé RewriteRule ^/lawson/portail $/lawson/portail/

Parmi beaucoup d'autres les choses ... Qu'est-ce qui me manque?

+0

Cela peut être une question bizarre, mais la BigIP de modifier l'URL d'une autre façon? – Powerlord

+0

Au début, nous le pensions, mais c'est un problème de slash fin Apache à coup sûr ... –

Répondre

6

Si vous ne pouvez pas obtenir une réponse sur la syntaxe RewriteRule, voici deux autres options pour vous: écrire un iRule personnalisé sur BigIp (voir F5 DevCentral) qui recherche 301 réponses et les convertit en SSL; laissez l'URL passer dans votre serveur WebSphere et effectuez une redirection par programme qui envoie HTTPS. Toutefois, étant donné que F5 met fin à la connexion SSL, vous devez définir un en-tête personnalisé que vous configurez (voir PQ86347) pour que Java request.getScheme() fonctionne comme prévu.

+0

Merci beaucoup beaucoup, cela ressemble à ma meilleure option jusqu'à présent si je ne peux pas obtenir la réécriture fonctionne ... –

0
LoadModule rewrite_module    modules/mod_rewrite.so 

assurez-vous que la ligne est quelque part vous httpd.conf

+0

Merci, j'aurais dû mentionner que ... Je n'ai pas la ligne décommentée ... LoadModule rewrite_module modules/mod_rewrite.so –

5

Fixé!

SOL6912: Configuration d'un profil HTTP pour réécrire les URL de sorte que redirige à partir d'un serveur HTTP spécifier le protocole HTTPS


Mise à jour: 07/08/07 00:00

Un serveur virtuel ClientSSL est généralement configuré pour accepter les connexions HTTPS d'un client, déchiffrer la session SSL et envoyer la requête HTTP non cryptée au serveur Web.

Lorsqu'un URI demandé n'inclut pas de barre oblique finale (une barre oblique, telle que /, à la fin de l'URI), certains serveurs Web génèrent une redirection de courtoisie. Sans une barre oblique finale, le serveur Web traite d'abord la ressource spécifiée dans l'URI comme un fichier. Si le fichier est introuvable, le serveur Web peut rechercher un répertoire portant le même nom et, s'il est trouvé, envoyer une réponse de redirection HTTP 302 au client avec une barre oblique finale. La redirection sera renvoyée au client en mode HTTP plutôt que HTTPS, entraînant l'échec de la session SSL.

Voici un exemple de la façon dont une réponse de redirection HTTP 302 provoque la session SSL à l'échec:

· Pour demander une session SSL, un utilisateur tape https://www.f5.com/stuff sans slash.

· Le navigateur client envoie une requête SSL au serveur virtuel ClientSSL, qui réside sur le système BIG-IP LTM. · Le système BIG-IP LTM décrypte ensuite la requête et envoie une commande GET/stuff au serveur Web.Comme le fichier/stuff n'existe pas sur le serveur Web, mais qu'il existe un répertoire/stuff/virtual, le serveur Web envoie une réponse de redirection HTTP 302 pour le répertoire, mais ajoute une barre oblique de fin à la ressource. Lorsque le serveur Web envoie la réponse HTTP 302, il spécifie HTTP (pas HTTPS).

· Lorsque le client reçoit la réponse HTTP 302, il envoie une nouvelle requête au serveur virtuel BIG-IP LTM qui spécifie HTTP (pas HTTPS). Par conséquent, la connexion SSL échoue.

Configuration d'un profil HTTP pour réécrire les URL

Dans la version BIG-IP LTM 9.x vous pouvez configurer un profil HTTP pour réécrire les URL afin que réoriente à partir d'un serveur HTTP spécifier le protocole HTTPS. Pour ce faire, procédez comme suit:

  1. Connectez-vous à l'utilitaire de configuration.

  2. Cliquez sur trafic local.

  3. Cliquez sur Profils.

  4. Cliquez sur le bouton Créer.

  5. Saisissez un nom pour le profil.

  6. Choisissez http dans le menu déroulant Profil parent.

  7. Sous Paramètres, définissez Redirect Rewrite à tous, la correspondance ou les nœuds, en fonction de votre configuration

Par exemple:

o Choisissez tout pour réécrire toute HTTP 301, 302, 303, 305, ou 307 redirige vers HTTPS

o Choisir correspondants pour réécrire des redirections lorsque le chemin et interroger les composants URI de la demande et la redirection sont identiques (à l'exception de la barre oblique finale)

o Choisissez nœud à réécrire REDIRECTIONS lorsque l'URI de redirection contient une adresse IP de noeud au lieu d'un nom d'hôte, et vous voulez que le système de changer à l'adresse du serveur virtuel

  1. Cliquez sur Terminé.

Vous devez maintenant associer le nouveau profil HTTP au serveur virtuel ClientSSL.

1

Essayez ceci:

# Trailing slash problem 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$   https://<t:sitename/>$1/ [redirect,last] 
Questions connexes