Migration des règles Apache mod_rewrite vers la syntaxe par défaut

Le serveur HTTP Apache fournit un moteur appelé mod_rewrite pour la réécriture des URL de requête HTTP. Si vous migrez les règles mod_rewrite d’Apache vers Citrix ADC, vous augmentez les performances du serveur principal. En outre, étant donné que la charge de Citrix ADC équilibre généralement plusieurs serveurs Web (parfois des milliers de), une fois les règles migrées vers le Citrix ADC, vous disposez d’un point de contrôle unique pour ces règles.

Voici des exemples de fonctions mod_rewrite et des traductions de ces fonctions en stratégies Rewrite et Responder sur Citrix ADC.

Conversion des variations d’URL en URL canoniques

Sur certains serveurs Web, vous pouvez avoir plusieurs URL pour une ressource. Bien que les URL canoniques soient utilisées et distribuées, d’autres URL peuvent exister sous forme de raccourcis ou d’URL internes. Vous pouvez vous assurer que les utilisateurs voient l’URL canonique quelle que soit l’URL utilisée pour effectuer une demande initiale.

Dans les exemples suivants, l’URL /~user est convertie en /u/user.

Solution Apache mod_rewrite pour convertir une URL

RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2[R]

Solution Citrix ADC pour la conversion d’une URL

add responder action act1 redirect '"/u/"+HTTP.REQ.URL.AFTER_STR("/~")' -bypassSafetyCheck yes
add responder policy pol1 'HTTP.REQ.URL.STARTSWITH("/~") && HTTP.REQ.URL.LENGTH.GT(2)' act1
bind responder global pol1 100

Conversion des variations de nom d’hôte en noms d’hôte canoniques

Vous pouvez appliquer l’utilisation d’un nom d’hôte particulier pour atteindre un site. Par exemple, vous pouvez appliquer l’utilisation de www.example.com au lieu de example.com.

Solution Apache mod_rewrite pour appliquer un nom d’hôte particulier pour les sites s’exécutant sur un port autre que 80


RewriteCond %{HTTP_HOST}   !^www.example.com
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www.example.com:%{SERVER_PORT}/$1 [L,R]

Solution Apache mod_rewrite pour appliquer un nom d’hôte particulier pour les sites s’exécutant sur le port 80


RewriteCond %{HTTP_HOST}   !^www.example.com
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R]

Solution Citrix ADC pour appliquer un nom d’hôte particulier pour les sites s’exécutant sur un port autre que 80


add responder action act1 redirect '"http://www.example.com:"+CLIENT.TCP.DSTPORT+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol1 '!HTTP.REQ.HOSTNAME.CONTAINS("www.example.com")&&!HTTP.REQ.HOSTNAME.EQ("")&&!HTTP.REQ.HOSTNAME.PORT.EQ(80)&&HTTP.REQ.HOSTNAME.CONTAINS("example.com")' act1
bind responder global pol1 100 END

Solution Citrix ADC pour appliquer un nom d’hôte particulier pour les sites s’exécutant sur le port 80


add responder action act1 redirect '"http://www.example.com"+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol1  '!HTTP.REQ.HOSTNAME.CONTAINS("www.example.com")&&!HTTP.REQ.HOSTNAME.EQ("")&&HTTP.REQ.HOSTNAME.PORT.EQ(80)&&HTTP.REQ.HOSTNAME.CONTAINS("example.com")' act1
bind responder global  pol1 100 END

Déplacement d’une racine de document

Habituellement, la racine du document d’un serveur Web est basée sur l’URL « / ». Cependant, la racine du document peut être n’importe quel répertoire. Vous pouvez rediriger le trafic vers la racine du document s’il passe du répertoire « / » de niveau supérieur à un autre répertoire.

Dans les exemples suivants, vous changez la racine du document de/à /e/www. Les deux premiers exemples remplacent simplement une chaîne par une autre. Le troisième exemple est plus universel car, en plus du remplacement du répertoire racine, il préserve le reste de l’URL (le chemin d’accès et la chaîne de requête), par exemple en redirigeant /example/file.html vers /e/www/example/file.html.

Solution Apache mod_rewrite pour déplacer la racine du document


RewriteEngine on
RewriteRule   ^/$  /e/www/  [R]

Solution Citrix ADC pour déplacer la racine du document


add responder action act1 redirect '"/e/www/"' -bypassSafetyCheck yes
add responder policy pol1 'HTTP.REQ.URL.EQ("/")' act1
bind responder global pol1 100

Solution Citrix ADC pour déplacer la racine du document et ajouter des informations de chemin à la requête


add responder action act1 redirect '"/e/www"+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol1 '!HTTP.REQ.URL.STARTSWITH("/e/www/")' act1
bind responder global pol1 100 END

Déplacement des répertoires personnels vers un nouveau serveur Web

Vous pouvez rediriger les demandes qui sont envoyées vers des répertoires de base sur un serveur Web vers un autre serveur Web. Par exemple, si un nouveau serveur Web remplace un ancien au fil du temps, lorsque vous migrez des répertoires de base vers le nouvel emplacement, vous devez rediriger les demandes pour les répertoires de base migrés vers le nouveau serveur Web.

Dans les exemples suivants, le nom d’hôte du nouveau serveur Web est newserver.

Solution Apache mod_rewrite pour rediriger vers un autre serveur Web


RewriteRule   ^/(.+)  http://newserver/$1     [R,L]

Solution Citrix ADC pour rediriger vers un autre serveur Web (méthode 1)


add responder  action act1 redirect '"http://newserver"+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol1 'HTTP.REQ.URL.REGEX_MATCH(re#^/(.+)#)'   act1
bind responder global pol1 100 END

Solution Citrix ADC pour rediriger vers un autre serveur Web (méthode 2)


add responder  action act1 redirect '"http://newserver"+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol1 'HTTP.REQ.URL.LENGTH.GT(1)' act1
bind responder global pol1 100 END

Utilisation de répertoires de base structurés

Généralement, un site comptant des milliers d’utilisateurs a une disposition de répertoire personnel structurée. Par exemple, chaque répertoire de base peut résider sous un sous-répertoire nommé en utilisant le premier caractère du nom d’utilisateur. Par exemple, le répertoire personnel de jsmith (/~jsmith/anypath) peut être /home/j/smith/.www/anypath, et le répertoire personnel de rvalveti (/~rvalveti/anypath) peut être /home/r/rvalveti/.www/anypath.

Les exemples suivants redirigent les demandes vers le répertoire de base.

Solution Apache mod_rewrite pour les répertoires de base structurés

RewriteRule   ^/~(([a-z])[a-z0-9]+)(.*)  /home/$2/$1/.www$3

Solution Citrix ADC pour les répertoires de base structurés

Solution Citrix ADC pour les répertoires de base structurés


add rewrite action act1 replace 'HTTP.REQ.URL'  '"/home/"+ HTTP.REQ.URL.AFTER_STR("~").PREFIX(1)+"/"+ HTTP.REQ.URL.AFTER_STR("~").BEFORE_STR("/")+"/.www"+HTTP.REQ.URL.SKIP('/',1)'  -bypassSafetyCheck yes
add rewrite policy pol1  'HTTP.REQ.URL.PATH.STARTSWITH("/~")' act1
bind rewrite global pol1 100

Redirection des URL non valides vers d’autres serveurs Web

Si une URL n’est pas valide, elle doit être redirigée vers un autre serveur Web. Par exemple, vous devez rediriger vers un autre serveur Web si un fichier nommé dans une URL n’existe pas sur le serveur nommé dans l’URL.

Sur Apache, vous pouvez effectuer cette vérification en utilisant mod_rewrite. Sur Citrix ADC, une légende HTTP peut rechercher un fichier sur un serveur en exécutant un script sur le serveur. Dans les exemples Citrix ADC suivants, un script nommé file_check.cgi traite l’URL et utilise ces informations pour vérifier la présence du fichier cible sur le serveur. Le script renvoie TRUE ou FALSE, et Citrix ADC utilise la valeur renvoyée par le script pour valider la stratégie.

En plus d’effectuer la redirection, Citrix ADC peut ajouter des en-têtes personnalisés ou, comme dans le deuxième exemple de Citrix ADC, il peut ajouter du texte dans le corps de la réponse.

Solution Apache mod_rewrite pour la redirection si une URL est incorrecte


RewriteCond   /your/docroot/%{REQUEST_FILENAME} !-f
RewriteRule   ^(.+)      http://webserverB.com/$1 [R]

Solution Citrix ADC pour la redirection si une URL est incorrecte (méthode 1)


add HTTPCallout Call
set policy httpCallout Call -IPAddress 10.102.59.101 -port 80 -hostExpr '"10.102.59.101"' -returnType BOOL -ResultExpr 'HTTP.RES.BODY(100).CONTAINS("True")'  -urlStemExpr '"/cgi-bin/file_check.cgi"'   -parameters query=http.req.url.path -headers Name("ddd")
add responder action act1 redirect '"http://webserverB.com"+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol1 '!HTTP.REQ.HEADER("Name").EXISTS  &&  !SYS.HTTP_CALLOUT(call)' act1
bind responder global pol1 100

Solution Citrix ADC pour la redirection si une URL est incorrecte (méthode 2)


add HTTPCallout Call
set policy httpCallout Call -IPAddress 10.102.59.101 -port 80 -hostExpr '"10.102.59.101"' -returnType BOOL -ResultExpr 'HTTP.RES.BODY(100).CONTAINS("True")'  -urlStemExpr '"/cgi-bin/file_check.cgi"'   -parameters query=http.req.url.path -headers Name("ddd")
add responder  action act1 respondwith  '"HTTP/1.1 302 Moved Temporarily\r\nLocation: http://webserverB.com"+HTTP.REQ.URL+"\r\n\r\nHTTPCallout Used"' -bypassSafetyCheck yes
add responder policy pol1 '!HTTP.REQ.HEADER("Name").EXISTS  &&  !SYS.HTTP_CALLOUT(call)' act1
bind responder global pol1 100

Réécriture d’une URL en fonction du temps

Vous pouvez réécrire une URL en fonction de l’heure. Les exemples suivants modifient une demande de example.html en example.day.html ou example.night.html, selon l’heure de la journée.

Solution Apache mod_rewrite pour réécrire une URL basée sur le temps


RewriteCond   %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond   %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule   ^example.html$ example.day.html [L]
RewriteRule   ^example.html$ example.night.html

Solution Citrix ADC pour réécrire une URL en fonction de l’heure


add rewrite action act1 insert_before 'HTTP.REQ.URL.PATH.SUFFIX('.',0)' '"day."'
add rewrite action act2  insert_before 'HTTP.REQ.URL.PATH.SUFFIX('.',0)' '"night."'
add rewrite  policy pol1 'SYS.TIME.WITHIN(LOCAL 07h 00m,LOCAL 18h 59m)' act1
add rewrite policy pol2 'true'  act2
bind rewrite global pol1 101
bind rewrite global pol2 102

Redirection vers un nouveau nom de fichier (Invisible pour l’utilisateur)

Si vous renommez une page Web, vous pouvez continuer à prendre en charge l’ancienne URL pour une compatibilité descendante tout en empêchant les utilisateurs de reconnaître que la page a été renommée.

Dans les deux premiers exemples suivants, le répertoire de base est /~quux/. Le troisième exemple prend en compte n’importe quel répertoire de base et la présence de chaînes de requête dans l’URL.

Solution Apache mod_rewrite pour gérer un changement de nom de fichier dans un emplacement fixe


RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo.html$  bar.html

Solution Citrix ADC pour gérer un changement de nom de fichier dans un emplacement fixe


add rewrite action act1 replace 'HTTP.REQ.URL.AFTER_STR("/~quux").SUBSTR("foo.html")' '"bar.html"'
add rewrite policy pol1 'HTTP.REQ.URL.ENDSWITH("/~quux/foo.html")' act1
bind rewrite global pol1 100

Solution Citrix ADC pour gérer un changement de nom de fichier quel que soit le répertoire de base ou les chaînes de requête dans l’URL


add rewrite action act1 replace 'HTTP.REQ.URL.PATH.SUFFIX('/',0)' '"bar.html"'
Add rewrite policy pol1 'HTTP.REQ.URL.PATH.CONTAINS("foo.html")' act1
Bind rewrite global pol1 100

Redirection vers un nouveau nom de fichier (URL visible par l’utilisateur)

Si vous renommez une page Web, vous pouvez continuer à prendre en charge l’ancienne URL pour une compatibilité descendante et permettre aux utilisateurs de voir que la page a été renommée en modifiant l’URL affichée dans le navigateur.

Dans les deux premiers exemples suivants, la redirection se produit lorsque le répertoire de base est /~quux/. Le troisième exemple prend en compte n’importe quel répertoire de base et la présence de chaînes de requête dans l’URL.

Solution Apache mod_rewrite pour changer le nom du fichier et l’URL affichée dans le navigateur


RewriteEngine on
RewriteBase    /~quux/
RewriteRule    ^old.html$ new.html  [R]

Solution Citrix ADC pour modifier le nom du fichier et l’URL affichée dans le navigateur


add responder action act1 redirect 'HTTP.REQ.URL.BEFORE_STR("foo.html")+"new.html"' -bypassSafetyCheck yes
add responder policy pol1 'HTTP.REQ.URL.ENDSWITH("/~quux/old.html")' act1
bind responder global pol1 100

Solution Citrix ADC pour modifier le nom de fichier et l’URL affichée dans le navigateur, quel que soit le répertoire de base ou les chaînes de requête dans l’URL


add responder action act1 redirect 'HTTP.REQ.URL.PATH.BEFORE_STR("old.html")+"new.html"+HTTP.REQ.URL.AFTER_STR("old.html")' -bypassSafetyCheck yes
add responder policy pol1 'HTTP.REQ.URL.PATH.CONTAINS("old.html")' act1
bind responder global pol1 100

Accepter le contenu dépendant du navigateur

Pour tenir compte des limitations spécifiques au navigateur, du moins pour les pages de niveau supérieur importantes, il est parfois nécessaire de définir des restrictions sur le type et la version du navigateur. Par exemple, vous pouvez définir une version maximale pour les dernières versions de Netscape, une version minimale pour les navigateurs Lynx et une version moyenne pour toutes les autres versions.

Les exemples suivants agissent sur l’en-tête HTTP « User-Agent », de sorte que si cet en-tête commence par « Mozilla/3”, la page MyPage.html est réécrite en MyPage.ns.html. Si le navigateur est « Lynx » ou « Mozilla » version 1 ou 2, l’URL devient myPage.20.html. Tous les autres navigateurs reçoivent la page MyPage.32.html.

Solution Apache mod_rewrite pour les paramètres spécifiques au navigateur


RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/3.*
RewriteRule ^MyPage.html$ MyPage.NS.html [L]
RewriteCond %{HTTP_USER_AGENT}  ^Lynx/.* [OR]
RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/[12].*
RewriteRule ^MyPage.html$ MyPage.20.html [L]
RewriteRule ^fMyPage.html$ MyPage.32.html [L]
Citrix ADC solution for browser-specific settings
add patset pat1
bind patset pat1 Mozilla/1
bind Patset pat1 Mozilla/2
bind patset pat1 Lynx
bind Patset pat1 Mozilla/3
add rewrite action act1 insert_before 'HTTP.REQ.URL.SUFFIX' '"NS."'
add rewrite action act2 insert_before 'HTTP.REQ.URL.SUFFIX' '"20."'
add rewrite action act3 insert_before 'HTTP.REQ.URL.SUFFIX' '"32."'
add rewrite policy pol1 'HTTP.REQ.HEADER("User-Agent").STARTSWITH_INDEX("pat1").EQ(4)' act1
add rewrite policy pol2 'HTTP.REQ.HEADER("User-Agent").STARTSWITH_INDEX("pat1").BETWEEN(1,3)' act2
add rewrite policy pol3 '!HTTP.REQ.HEADER("User-Agent").STARTSWITH_ANY("pat1")' act3
bind rewrite global pol1 101 END
bind rewrite global pol2 102 END
bind rewrite global pol3 103 END

Blocage de l’accès par les robots

Vous pouvez empêcher un robot de récupérer des pages d’un répertoire spécifique ou d’un ensemble de répertoires pour faciliter le trafic vers et depuis ces répertoires. Vous pouvez restreindre l’accès en fonction de l’emplacement spécifique ou bloquer les demandes en fonction des informations contenues dans les en-têtes HTTP User-Agent.

Dans les exemples suivants, l’emplacement Web à bloquer est /~quux/foo/arc/, les adresses IP à bloquer sont 123.45.67.8 et 123.45.67.9, et le nom du robot est NameOfBadRobot.

Solution Apache mod_rewrite pour bloquer un chemin et un en-tête User-Agent


RewriteCond %{HTTP_USER_AGENT}   ^NameOfBadRobot.*
RewriteCond %{REMOTE_ADDR}       ^123.45.67.[8-9]$
RewriteRule ^/~quux/foo/arc/.+   -   [F]

Solution Citrix ADC pour bloquer un chemin d’accès et un en-tête User-Agent


add responder action act1 respondwith '"HTTP/1.1 403 Forbidden\r\n\r\n"'
add responder policy pol1 'HTTP.REQ.HEADER("User_Agent").STARTSWITH("NameOfBadRobot")&&CLIENT.IP.SRC.EQ(123.45.67.8)&&CLIENT.IP.SRC.EQ(123.45.67.9) && HTTP.REQ.URL.STARTSWITH("/~quux/foo/arc")' act1
bind responder global pol1 100

Blocage de l’accès aux images en ligne

Si vous trouvez des gens qui se rendent fréquemment sur votre serveur pour copier des graphiques en ligne pour leur propre usage (et générer du trafic inutile), vous pouvez restreindre la capacité du navigateur à envoyer un en-tête de référent HTTP.

Dans l’exemple suivant, les graphiques se trouvent dansExemple.

Solution Apache mod_rewrite pour bloquer l’accès à une image en ligne


RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.\*$
RewriteRule .\*.gif$ - [F]

Solution Citrix ADC pour bloquer l’accès à une image en ligne


add patset pat1
bind patset pat1 .gif
bind patset pat1 .jpeg
add responder action act1 respondwith '"HTTP/1.1 403 Forbidden\r\n\r\n"'
add responder policy pol1 '!HTTP.REQ.HEADER("Referer").EQ("") && !HTTP.REQ.HEADER("Referer").STARTSWITH("http://www.quux-corp.de/~quux/")&&HTTP.REQ.URL.ENDSWITH_ANY("pat1")' act1
bind responder global pol1 100

Création de liens sans extension

Pour empêcher les utilisateurs de connaître les détails de l’application ou du script côté serveur, vous pouvez masquer les extensions de fichiers aux utilisateurs. Pour ce faire, vous pouvez prendre en charge les liens sans extension. Vous pouvez obtenir ce comportement en utilisant des règles de réécriture pour ajouter une extension à toutes les demandes ou pour ajouter des extensions de manière sélective aux demandes.

Les deux premiers exemples suivants montrent l’ajout d’une extension à toutes les URL de requête. Dans le dernier exemple, l’une des deux extensions de fichier est ajoutée. Notez que dans le dernier exemple, le module mod_rewrite peut facilement trouver l’extension de fichier car ce module réside sur le serveur Web. En revanche, Citrix ADC doit appeler une légende HTTP pour vérifier l’extension du fichier demandé sur le serveur Web. Basé sur la réponse de légende, Citrix ADC ajoute l’extension .html ou .php à l’URL de la requête.

Remarque

Dans le second exemple Citrix ADC, une légende HTTP est utilisée pour interroger un script nommé file_check.cgi hébergé sur le serveur. Ce script vérifie si l’argument fourni dans la légende est un nom de fichier valide.

Solution Apache mod_rewrite pour ajouter une extension .php à toutes les requêtes


RewriteRule ^/?([a-z]+)$ $1.php [L]

Stratégie Citrix ADC pour ajouter une extension .php à toutes les requêtes


add rewrite action act1 insert_after 'HTTP.REQ.URL' '".php"'
add rewrite policy pol1 'HTTP.REQ.URL.PATH.REGEX_MATCH(re#^/([a-z]+)$#)' act1
bind rewrite global pol1 100

Solution Apache mod_rewrite pour ajouter des extensions .html ou .php aux requêtes


RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.html –f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.html [L]

Stratégie Citrix ADC pour ajouter des extensions .html ou .php aux requêtes


add HTTPCallout Call_html
add HTTPCallout Call_php
set policy httpCallout Call_html -IPAddress 10.102.59.101 -port 80 -hostExpr '"10.102.59.101"' -returnType BOOL -ResultExpr 'HTTP.RES.BODY(100).CONTAINS("True")'  -urlStemExpr '"/cgi-bin/file_check.cgi"'   -parameters query=http.req.url+".html"
set policy httpCallout Call_php -IPAddress 10.102.59.101 -port 80 -hostExpr '"10.102.59.101"' -returnType BOOL -ResultExpr 'HTTP.RES.BODY(100).CONTAINS("True")'  -urlStemExpr '"/cgi-bin/file_check.cgi"' -parameters query=http.req.url+".php"
add patset pat1
bind patset pat1 .html
bind patset pat1 .php
bind patset pat1 .asp
bind patset pat1 .cgi
add rewrite  action act1 insert_after 'HTTP.REQ.URL.PATH'  '".html"'
add rewrite  action act2 insert_after "HTTP.REQ.URL.PATH"  '".php"'
add rewrite policy pol1 '!HTTP.REQ.URL.CONTAINS_ANY("pat1") && SYS.HTTP_CALLOUT(Call_html)' act1
add rewrite policy pol2 '!HTTP.REQ.URL.CONTAINS_ANY("pat1") && SYS.HTTP_CALLOUT(Call_php)' act2
bind rewrite global pol1 100 END
bind rewrite global pol2 101 END

Redirection d’un URI de travail vers un nouveau format

Supposons que vous disposez d’un ensemble d’URL fonctionnelles qui ressemblent aux suivantes :


/index.php?id=nnnn

Pour modifier ces URL en /nnnn et vous assurer que les moteurs de recherche mettent à jour leurs index au nouveau format URI, vous devez effectuer les opérations suivantes :

  • Redirigez les anciens URI vers les nouveaux afin que les moteurs de recherche mettent à jour leurs index.
  • Réécrivez le nouvel URI à l’ancien pour que le script index.php s’exécute correctement.

Pour ce faire, vous pouvez insérer du code marqueur dans la chaîne de requête (en vous assurant que le code marqueur n’est pas vu par les visiteurs), puis supprimer le code marqueur pour le script index.php.

Les exemples suivants redirigent d’un ancien lien vers un nouveau format uniquement si un marqueur n’est pas présent dans la chaîne de requête. Le lien qui utilise le nouveau format est réécrit dans l’ancien format et un marqueur est ajouté à la chaîne de requête.

Solution Apache mod_rewrite


RewriteCond %{QUERY_STRING} !marker
RewriteCond %{QUERY_STRING} id=([-a-zA-Z0-9_+]+)
RewriteRule ^/?index.php$ %1? [R,L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)$  index.php?marker&id=$1 [L]
Citrix ADC solution
add responder action act_redirect redirect 'HTTP.REQ.URL.PATH.BEFORE_STR("index.php")+HTTP.REQ.URL.QUERY.VALUE("id")' -bypassSafetyCheck yes
add responder policy pol_redirect '!HTTP.REQ.URL.QUERY.CONTAINS("marker")&& HTTP.REQ.URL.QUERY.VALUE("id").REGEX_MATCH(re/[-a-zA-Z0-9_+]+/) && HTTP.REQ.URL.PATH.CONTAINS("index.php")' act_redirect
bind responder global pol_redirect 100 END
add rewrite action act1 replace 'HTTP.REQ.URL.PATH.SUFFIX('/',0)' '"index.phpmarker&id="+HTTP.REQ.URL.PATH.SUFFIX('/',0)' -bypassSafetyCheck yes
add rewrite policy pol1 '!HTTP.REQ.URL.QUERY.CONTAINS("marker")'  act1
bind rewrite global pol1 100 END

S’assurer qu’un serveur sécurisé est utilisé pour les pages sélectionnées

Pour vous assurer que seuls les serveurs sécurisés sont utilisés pour les pages Web sélectionnées, vous pouvez utiliser le code mod_rewrite Apache ou les stratégies de répondeur Citrix ADC.

Solution Apache mod_rewrite


RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(page1|page2|page3|page4|page5)$  https://www.example.com/%1 [R,L]

Solution Citrix ADC utilisant des expressions régulières


add responder action res_redirect redirect  '"https://www.example.com"+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol_redirect '!CLIENT.TCP.DSTPORT.EQ(443)&&HTTP.REQ.URL.REGEX_MATCH(re/page[1-5]/)'  res_redirect
bind responder global pol_redirect 100 END

Solution Citrix ADC utilisant des jeux de motifs


add patset pat1
bind patset pat1 page1
bind patset pat1 page2
bind patset pat1 page3
bind patset pat1 page4
bind patset pat1 page5
add responder action res_redirect redirect  '"https://www.example.com"+HTTP.REQ.URL' -bypassSafetyCheck yes
add responder policy pol_redirect '!CLIENT.TCP.DSTPORT.EQ(443)&&HTTP.REQ.URL.CONTAINS_ANY("pat1")'  res_redirect
bind responder global pol_redirect 100 END

Migration des règles Apache mod_rewrite vers la syntaxe par défaut

Dans cet article