Migration des règles mod_rewrite d’Apache vers la politique avancée
Le serveur HTTP Apache fournit un moteur appelé mod_rewrite pour réécrire les URL des requêtes HTTP. Si vous migrez les règles mod_rewrite d’Apache vers NetScaler, vous améliorez les performances du serveur principal. En outre, étant donné que NetScaler équilibre généralement la charge de plusieurs serveurs Web (parfois des milliers), après avoir migré les règles vers NetScaler, vous disposerez d’un point de contrôle unique pour ces règles.
Vous trouverez ci-dessous des exemples de fonctions mod_rewrite et des traductions de ces fonctions en stratégies de réécriture et de réponse sur NetScaler.
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 doivent être 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]
<!--NeedCopy-->
Solution NetScaler pour convertir une URL
add responder action act1 redirect '"/u/"+HTTP.REQ.URL.AFTER_STR("/~")'
add responder policy pol1 'HTTP.REQ.URL.STARTSWITH("/~") && HTTP.REQ.URL.LENGTH.GT(2)' act1
bind responder global pol1 100
<!--NeedCopy-->
Conversion de variantes de noms d’hôtes en noms d’hôtes canoniques
Vous pouvez imposer l’utilisation d’un nom d’hôte particulier pour accéder à un site. Par exemple, vous pouvez imposer l’utilisation de www.exemple.com au lieu de exemple.com.
Solution Apache mod_rewrite pour appliquer un nom d’hôte particulier pour les sites exécutés 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]
<!--NeedCopy-->
Solution Apache mod_rewrite pour appliquer un nom d’hôte particulier pour les sites exécutés sur le port 80
RewriteCond %{HTTP_HOST} !^www.example.com
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.example.com/$1 [L,R]
<!--NeedCopy-->
Solution NetScaler permettant d’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'
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
<!--NeedCopy-->
Solution NetScaler 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'
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
<!--NeedCopy-->
Déplacement d’une racine de document
Habituellement, la racine du document d’un serveur Web est basée sur l’URL «/». Toutefois, 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 vers 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]
<!--NeedCopy-->
Solution NetScaler pour déplacer la racine du document
add responder action act1 redirect '"/e/www/"'
add responder policy pol1 'HTTP.REQ.URL.EQ("/")' act1
bind responder global pol1 100
<!--NeedCopy-->
Solution NetScaler pour déplacer la racine du document et ajouter des informations de chemin à la demande
add responder action act1 redirect '"/e/www"+HTTP.REQ.URL'
add responder policy pol1 '!HTTP.REQ.URL.STARTSWITH("/e/www/")' act1
bind responder global pol1 100 END
<!--NeedCopy-->
Déplacement des répertoires personnels vers un nouveau serveur Web
Vous pouvez souhaiter rediriger les demandes envoyées vers les répertoires personnels d’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 personnels vers le nouvel emplacement, vous devez rediriger les demandes des répertoires personnels 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]
<!--NeedCopy-->
Solution NetScaler pour la redirection vers un autre serveur Web (méthode 1)
add responder action act1 redirect '"http://newserver"+HTTP.REQ.URL'
add responder policy pol1 'HTTP.REQ.URL.REGEX_MATCH(re#^/(.+)#)' act1
bind responder global pol1 100 END
<!--NeedCopy-->
Solution NetScaler pour la redirection vers un autre serveur Web (méthode 2)
add responder action act1 redirect '"http://newserver"+HTTP.REQ.URL'
add responder policy pol1 'HTTP.REQ.URL.LENGTH.GT(1)' act1
bind responder global pol1 100 END
<!--NeedCopy-->
Utilisation de répertoires personnels structurés
En règle générale, un site comptant des milliers d’utilisateurs possède une mise en page de répertoire de base structurée. Par exemple, chaque répertoire personnel peut résider dans un sous-répertoire nommé à l’aide du 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 personnels structurés
RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2/$1/.www$3
<!--NeedCopy-->
Solution NetScaler pour les annuaires personnels structurés
Solution NetScaler pour les annuaires personnels 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)'
add rewrite policy pol1 'HTTP.REQ.URL.PATH.STARTSWITH("/~")' act1
bind rewrite global pol1 100
<!--NeedCopy-->
Redirection d’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 NetScaler, une légende HTTP permet de vérifier la présence d’un fichier sur un serveur en exécutant un script sur le serveur. Dans les exemples NetScaler 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 VRAI ou FAUX, et NetScaler utilise la valeur renvoyée par le script pour valider la stratégie.
Outre la redirection, NetScaler peut ajouter des en-têtes personnalisés ou, comme dans le deuxième exemple de NetScaler, ajouter du texte dans le corps de la réponse.
Solution Apache mod_rewrite pour la redirection si une URL est erronée
RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f
RewriteRule ^(.+) http://webserverB.com/$1 [R]
<!--NeedCopy-->
Solution NetScaler pour la redirection en cas d’URL 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'
add responder policy pol1 '!HTTP.REQ.HEADER("Name").EXISTS && !SYS.HTTP_CALLOUT(call)' act1
bind responder global pol1 100
<!--NeedCopy-->
Solution NetScaler pour la redirection en cas d’URL 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"'
add responder policy pol1 '!HTTP.REQ.HEADER("Name").EXISTS && !SYS.HTTP_CALLOUT(call)' act1
bind responder global pol1 100
<!--NeedCopy-->
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 en fonction de l’heure
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
<!--NeedCopy-->
Solution NetScaler 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
<!--NeedCopy-->
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 assurer la 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
<!--NeedCopy-->
Solution NetScaler 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
<!--NeedCopy-->
Solution NetScaler pour gérer un changement de nom de fichier indépendamment du répertoire de base ou des 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
<!--NeedCopy-->
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 à des fins de 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 modifier le nom du fichier et l’URL affichées dans le navigateur
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^old.html$ new.html [R]
<!--NeedCopy-->
Solution NetScaler pour modifier le nom du fichier et l’URL affichés dans le navigateur
add responder action act1 redirect 'HTTP.REQ.URL.BEFORE_STR("foo.html")+"new.html"'
add responder policy pol1 'HTTP.REQ.URL.ENDSWITH("/~quux/old.html")' act1
bind responder global pol1 100
<!--NeedCopy-->
Solution NetScaler pour modifier le nom du fichier et l’URL affichés dans le navigateur indépendamment du répertoire de base ou des chaînes de requête de l’URL
add responder action act1 redirect 'HTTP.REQ.URL.PATH.BEFORE_STR("old.html")+"new.html"+HTTP.REQ.URL.AFTER_STR("old.html")'
add responder policy pol1 'HTTP.REQ.URL.PATH.CONTAINS("old.html")' act1
bind responder global pol1 100
<!--NeedCopy-->
Prise en charge du contenu dépendant du navigateur
Pour tenir compte des limitations spécifiques au navigateur, du moins pour les pages de premier niveau 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 variantes de Netscape, une version minimale pour les navigateurs Lynx et une version de fonctionnalité moyenne pour toutes les autres.
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]
NetScaler 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
<!--NeedCopy-->
Blocage de l’accès des 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 vous pouvez 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]
<!--NeedCopy-->
Solution NetScaler pour bloquer un chemin 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
<!--NeedCopy-->
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 sont situés dans Exemple.
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]
<!--NeedCopy-->
Solution NetScaler 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
<!--NeedCopy-->
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 voudrez peut-être 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 aux demandes de manière sélective.
Les deux premiers exemples suivants montrent l’ajout d’une extension à toutes les URL de demande. 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, NetScaler doit invoquer une légende HTTP pour vérifier l’extension du fichier demandé sur le serveur Web. En fonction de la réponse à la légende, NetScaler ajoute l’extension .html ou .php à l’URL de la demande.
Remarque
Dans le deuxième exemple de NetScaler, 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]
<!--NeedCopy-->
Stratégie NetScaler pour l’ajout d’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
<!--NeedCopy-->
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]
<!--NeedCopy-->
Stratégie NetScaler pour l’ajout d’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
<!--NeedCopy-->
Redirection d’un URI de travail vers un nouveau format
Supposons que vous disposiez d’un ensemble d’URL fonctionnelles ressemblant à ce qui suit :
/index.php?id=nnnn
<!--NeedCopy-->
Pour modifier ces URL en /nnnn et vous assurer que les moteurs de recherche mettent à jour leurs index au nouveau format d’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 sur l’ancien pour que le script index.php s’exécute correctement.
Pour ce faire, vous pouvez insérer du code de marqueur dans la chaîne de requête (en vous assurant que le code de marqueur n’est pas vu par les visiteurs), puis supprimer le code de marqueur du script index.php.
Les exemples suivants redirigent un ancien lien vers un nouveau format uniquement si aucun marqueur n’est 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]
NetScaler solution
add responder action act_redirect redirect 'HTTP.REQ.URL.PATH.BEFORE_STR("index.php")+HTTP.REQ.URL.QUERY.VALUE("id")'
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)'
add rewrite policy pol1 '!HTTP.REQ.URL.QUERY.CONTAINS("marker")' act1
bind rewrite global pol1 100 END
<!--NeedCopy-->
S’assurer qu’un serveur sécurisé est utilisé pour les pages sélectionnées
Pour vous assurer que seuls des serveurs sécurisés sont utilisés pour certaines pages Web, vous pouvez utiliser le code Apache mod_rewrite ou les stratégies NetScaler Responder suivants.
Solution Apache mod_rewrite
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(page1|page2|page3|page4|page5)$ https://www.example.com/%1 [R,L]
<!--NeedCopy-->
Solution NetScaler utilisant des expressions régulières
add responder action res_redirect redirect '"https://www.example.com"+HTTP.REQ.URL'
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
<!--NeedCopy-->
Solution NetScaler utilisant des ensembles de modèles
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'
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
<!--NeedCopy-->
Dans cet article
- Conversion des variations d’URL en URL canoniques
- Solution Apache mod_rewrite pour convertir une URL
- Solution NetScaler pour convertir une URL
- Conversion de variantes de noms d’hôtes en noms d’hôtes canoniques
- Solution Apache mod_rewrite pour appliquer un nom d’hôte particulier pour les sites exécutés sur un port autre que 80
- Solution Apache mod_rewrite pour appliquer un nom d’hôte particulier pour les sites exécutés sur le port 80
- Solution NetScaler permettant d’appliquer un nom d’hôte particulier pour les sites s’exécutant sur un port autre que 80
- Solution NetScaler pour appliquer un nom d’hôte particulier pour les sites s’exécutant sur le port 80
- Déplacement d’une racine de document
- Solution Apache mod_rewrite pour déplacer la racine du document
- Solution NetScaler pour déplacer la racine du document
- Solution NetScaler pour déplacer la racine du document et ajouter des informations de chemin à la demande
- Déplacement des répertoires personnels vers un nouveau serveur Web
- Solution Apache mod_rewrite pour rediriger vers un autre serveur Web
- Solution NetScaler pour la redirection vers un autre serveur Web (méthode 1)
- Solution NetScaler pour la redirection vers un autre serveur Web (méthode 2)
- Utilisation de répertoires personnels structurés
- Solution Apache mod_rewrite pour les répertoires personnels structurés
- Solution NetScaler pour les annuaires personnels structurés
- Redirection d’URL non valides vers d’autres serveurs Web
- Solution Apache mod_rewrite pour la redirection si une URL est erronée
- Solution NetScaler pour la redirection en cas d’URL incorrecte (méthode 1)
- Solution NetScaler pour la redirection en cas d’URL incorrecte (méthode 2)
- Réécriture d’une URL en fonction du temps
- Solution Apache mod_rewrite pour réécrire une URL en fonction de l’heure
- Solution NetScaler pour réécrire une URL en fonction de l’heure
- Redirection vers un nouveau nom de fichier (invisible pour l’utilisateur)
- Solution Apache mod_rewrite pour gérer un changement de nom de fichier dans un emplacement fixe
- Solution NetScaler pour gérer un changement de nom de fichier dans un emplacement fixe
- Solution NetScaler pour gérer un changement de nom de fichier indépendamment du répertoire de base ou des chaînes de requête dans l’URL
- Redirection vers un nouveau nom de fichier (URL visible par l’utilisateur)
- Solution Apache mod_rewrite pour modifier le nom du fichier et l’URL affichées dans le navigateur
- Solution NetScaler pour modifier le nom du fichier et l’URL affichés dans le navigateur
- Solution NetScaler pour modifier le nom du fichier et l’URL affichés dans le navigateur indépendamment du répertoire de base ou des chaînes de requête de l’URL
- Prise en charge du contenu dépendant du navigateur
- Solution Apache mod_rewrite pour les paramètres spécifiques au navigateur
- Blocage de l’accès des robots
- Solution Apache mod_rewrite pour bloquer un chemin et un en-tête User-Agent
- Solution NetScaler pour bloquer un chemin et un en-tête User-Agent
- Blocage de l’accès aux images en ligne
- Solution Apache mod_rewrite pour bloquer l’accès à une image en ligne
- Solution NetScaler pour bloquer l’accès à une image en ligne
- Création de liens sans extension
- Solution Apache mod_rewrite pour ajouter une extension .php à toutes les requêtes
- Stratégie NetScaler pour l’ajout d’une extension .php à toutes les requêtes
- Solution Apache mod_rewrite pour ajouter des extensions .html ou .php aux requêtes
- Stratégie NetScaler pour l’ajout d’extensions .html ou .php aux requêtes
- Redirection d’un URI de travail vers un nouveau format
- Solution Apache mod_rewrite
- S’assurer qu’un serveur sécurisé est utilisé pour les pages sélectionnées
- Solution Apache mod_rewrite
- Solution NetScaler utilisant des expressions régulières
- Solution NetScaler utilisant des ensembles de modèles