ADC

Apache mod_rewrite ルールのデフォルト構文への移行

Apache HTTP サーバは、HTTP リクエスト URL を書き換えるための mod_rewrite と呼ばれるエンジンを提供します。mod_rewriteルールをApacheからCitrix ADCに移行すると、バックエンドサーバーのパフォーマンスが向上します。さらに、Citrix ADCは通常、複数のWebサーバー(時には数千もの)の負荷分散を行うため、ルールをCitrix ADCに移行した後、これらのルールを一元的に制御できます。

次に、mod_rewrite関数の例と、Citrix ADC上のリライトポリシーとレスポンダーポリシーへのこれらの関数の変換を示します。

URL のバリエーションを正規の URL に変換する

一部の Web サーバーでは、1 つのリソースに対して複数の URL を持つことができます。正規の URL を使用および配布する必要がありますが、他の URL はショートカットまたは内部 URL として存在する可能性があります。最初のリクエストに使用された URL に関係なく、正規の URL がユーザーに表示されるようにすることができます。

次の例では、URL /~user を /u/user に変換しています。

URLを変換するためのApacheのmod_rewriteソリューション

RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2[R]
<!--NeedCopy-->

URLを変換するためのCitrix ADCソリューション

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
<!--NeedCopy-->

ホスト名のバリエーションを正規ホスト名に変換する

サイトにアクセスするために特定のホスト名の使用を強制することができます。たとえば、example.com の代わりに www.example.com の使用を強制することができます。

80 以外のポートで実行されているサイトに特定のホスト名を適用するための Apache mod_rewrite ソリューション


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

ポート80で実行されているサイトに特定のホスト名を適用するためのApache mod_rewriteソリューション


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

80以外のポートで実行されているサイトに特定のホスト名を適用するCitrix ADCソリューション


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
<!--NeedCopy-->

ポート80で実行されているサイトに特定のホスト名を適用するためのCitrix ADCソリューション


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
<!--NeedCopy-->

ドキュメントルートの移動

通常、Webサーバーのドキュメントルートは、URL「/」に基づいています。ただし、ドキュメントルートには任意のディレクトリを指定できます。トラフィックが最上位の「/」ディレクトリから別のディレクトリに変更された場合は、ドキュメントルートにリダイレクトできます。

次の例では、ドキュメントのルートを/から /e/wwwに変更します。最初の2つの例は、ある文字列を別の文字列に置き換えるだけです。3 番目の例は、ルートディレクトリを置き換えるとともに、URL の残りの部分(パスとクエリ文字列)を保持するため、たとえば /example/file.html を /e/www/example/file.html にリダイレクトします。

ドキュメントルートを移動するためのApacheのmod_rewriteソリューション


RewriteEngine on
RewriteRule   ^/$  /e/www/  [R]
<!--NeedCopy-->

ドキュメントルートを移動するためのCitrix ADCソリューション


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

ドキュメントルートを移動し、リクエストにパス情報を追加するためのCitrix ADCソリューション


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
<!--NeedCopy-->

ホームディレクトリを新しい Web サーバーに移動する

Web サーバー上のホームディレクトリに送信された要求を別の Web サーバーにリダイレクトできます。たとえば、新しい Web サーバーが古いサーバーを置き換える場合、ホームディレクトリを新しい場所に移行するときに、移行したホームディレクトリに対する要求を新しい Web サーバーにリダイレクトする必要があります。

次の例では、新しい Web サーバーのホスト名は newserver です。

別のWebサーバーにリダイレクトするためのApacheのmod_rewriteソリューション


RewriteRule   ^/(.+)  http://newserver/$1     [R,L]
<!--NeedCopy-->

別のWebサーバーにリダイレクトするためのCitrix ADCソリューション(方法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
<!--NeedCopy-->

別のWebサーバーにリダイレクトするためのCitrix ADCソリューション(方法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
<!--NeedCopy-->

構造化されたホームディレクトリの操作

通常、数千人のユーザーがいるサイトには、構造化されたホームディレクトリレイアウトがあります。たとえば、各ホームディレクトリは、ユーザー名の最初の文字を使用して名前が付けられたサブディレクトリの下に配置できます。たとえば、jsmith (/~jsmith/anypath) のホームディレクトリは /home/j/smith/.www/anypathであり、rvalveti (/~rvalveti/anypath) のホームディレクトリは /home/r/r/rvalveti/.www/anypathです。

次の例では、要求をホームディレクトリにリダイレクトします。

構造化されたホームディレクトリ用のApacheのmod_rewriteソリューション

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

構造化されたホームディレクトリ用のCitrix ADCソリューション

構造化されたホームディレクトリ用のCitrix ADCソリューション


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

<!--NeedCopy-->

無効な URL を他の Web サーバーにリダイレクトする

URL が有効でない場合は、別の Web サーバーにリダイレクトする必要があります。たとえば、URL で指定されたファイルが URL で指定されたサーバー上に存在しない場合は、別の Web サーバーにリダイレクトする必要があります。

Apache では、mod_rewrite を使用してこのチェックを実行できます。Citrix ADCでは、HTTPコールアウトは、サーバー上のスクリプトを実行して、サーバー上のファイルをチェックできます。次のCitrix ADC 例では、file_check.cgiという名前のスクリプトがURLを処理し、この情報を使用してサーバー上にターゲットファイルが存在するかどうかをチェックします。スクリプトはTRUEまたはFALSEを返し、Citrix ADCはスクリプトが返す値を使用してポリシーを検証します。

リダイレクトの実行に加えて、Citrix ADCはカスタムヘッダーを追加することも、2番目のCitrix ADCの例のように、レスポンス本文にテキストを追加することもできます。

URLが間違っている場合のリダイレクトのためのApacheのmod_rewriteソリューション


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

<!--NeedCopy-->

URLが間違っている場合のリダイレクトのためのCitrix ADCソリューション(方法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

<!--NeedCopy-->

URLが間違っている場合のリダイレクトのためのCitrix ADCソリューション(方法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

<!--NeedCopy-->

時間に基づいてURLを書き換え

時間に基づいて URL を書き換えることができます。次の例では、時間帯に応じて、example.html のリクエストを example.day.html または example.night.html に変更します。

時間に基づいてURLを書き換えるためのApacheのmod_rewriteソリューション


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-->

時間に基づいてURLを書き換えるためのCitrix ADCソリューション


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-->

新しいファイル名へのリダイレクト(ユーザーには見えない)

Web ページの名前を変更した場合、下位互換性のために古い URL を引き続きサポートし、ページの名前が変更されたことをユーザーが認識できないようにすることができます。

次の例の最初の 2 つのベースディレクトリは /~quux/ です。3 番目の例では、任意のベースディレクトリと、URL 内のクエリ文字列が存在しています。

固定された場所でファイル名の変更を管理するためのApache mod_rewriteソリューション


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

<!--NeedCopy-->

特定の場所でファイル名の変更を管理するためのCitrix ADCソリューション


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-->

URLのベースディレクトリまたはクエリ文字列に関係なく、ファイル名の変更を管理するためのCitrix ADCソリューション


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-->

新しいファイル名へのリダイレクト (ユーザー表示の URL)

Web ページの名前を変更する場合、下位互換性を保つために古い URL を引き続きサポートし、ブラウザに表示される URL を変更することでページの名前が変更されたことをユーザーに確認できるようにすることができます。

次の例の最初の 2 つでは、ベースディレクトリが /~quux/ のときにリダイレクトが行われます。3 番目の例では、任意のベースディレクトリと、URL 内のクエリ文字列が存在しています。

ブラウザに表示されるファイル名とURLを変更するためのApacheのmod_rewriteソリューション


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

<!--NeedCopy-->

ブラウザに表示されるファイル名とURLを変更するためのCitrix ADCソリューション


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

<!--NeedCopy-->

URLのベースディレクトリやクエリ文字列に関係なく、ブラウザに表示されるファイル名とURLを変更するためのCitrix ADCソリューション


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

<!--NeedCopy-->

ブラウザに依存するコンテンツの収容

ブラウザ固有の制限(少なくとも重要なトップレベルページの場合)に対応するために、ブラウザの種類とバージョンに制限を設定する必要がある場合があります。たとえば、最新の Netscape バリアントには最大バージョン、Lynx ブラウザには最小バージョン、その他すべてのバージョンには平均機能バージョンを設定できます。

次の例では、HTTP ヘッダー「ユーザーエージェント」に対して動作し、このヘッダーが「Mozilla/3」 で始まる場合、ページ MyPage.html が MyPage.NS.html に書き換えられます。ブラウザが「リンクス」または「Mozilla」バージョン 1 または 2 の場合、URL は MyPage.20.html になります。他のすべてのブラウザは、ページMyPage.32.htmlを受け取ります。

ブラウザ固有の設定のためのApacheのmod_rewriteソリューション


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

<!--NeedCopy-->

ロボットによるアクセスの遮断

ロボットが特定のディレクトリまたは一連のディレクトリからページを取得することをブロックして、これらのディレクトリとの間のトラフィックを容易にすることができます。特定の場所に基づいてアクセスを制限することも、User-Agent HTTP ヘッダーの情報に基づいて要求をブロックすることもできます。

次の例では、ブロックされる Web の場所は /~quux/foo/arc/ で、ブロックされる IP アドレスは 123.45.67.8 と 123.45.67.9 で、ロボットの名前は NameOfBadRobot です。

パスとユーザーエージェントヘッダーをブロックするためのApache mod_rewriteソリューション


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

<!--NeedCopy-->

パスとユーザーエージェントヘッダーをブロックするためのCitrix ADCソリューション


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-->

インライン画像へのアクセスをブロックする

ユーザーが頻繁に自分の使用のためにインライングラフィックをコピーするためにサーバーに行くと(そして不要なトラフィックを生成する)場合は、HTTP Refererヘッダーを送信するブラウザーの機能を制限することができます。

次の例では、グラフィックスは Exampleにあります。

インラインイメージへのアクセスをブロックするためのApache mod_rewriteソリューション


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

<!--NeedCopy-->

インラインイメージへのアクセスをブロックするためのCitrix ADCソリューション


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-->

延長なしリンクの作成

ユーザーがサーバー側でアプリケーションまたはスクリプトの詳細を知らないようにするには、ファイル拡張子をユーザーに表示しないようにします。これを行うには、拡張なしのリンクをサポートしたい場合があります。この動作は、書き換えルールを使用してすべての要求に拡張機能を追加したり、要求に拡張機能を選択的に追加したりすることで実現できます。

次の例の最初の 2 つは、すべてのリクエスト URL に拡張機能を追加することを示しています。最後の例では、2 つのファイル拡張子のうちの 1 つが追加されます。最後の例では、mod_rewrite モジュールはファイル拡張子を簡単に見つけることができます。これは、このモジュールが Web サーバー上に存在するためです。これとは対照的に、Citrix ADCはHTTPコールアウトを呼び出して、Webサーバー上の要求されたファイルの拡張子をチェックする必要があります。このコールアウト応答に基づいて、Citrix ADCは要求URLに.htmlまたは.php拡張子を追加します。

2番目のCitrix ADC 例では、HTTPコールアウトを使用して、サーバーでホストされている file_check.cgiという名前のスクリプトを照会します。このスクリプトは、コールアウトで指定された引数が有効なファイル名であるかどうかをチェックします。

すべてのリクエストに.php拡張子を追加するためのApacheのmod_rewriteソリューション


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

<!--NeedCopy-->

すべてのリクエストに.php拡張子を追加するためのCitrix ADCポリシー


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-->

.htmlまたは.phpの拡張子をリクエストに追加するためのApacheのmod_rewriteソリューション


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-->

.htmlまたは.phpの拡張子をリクエストに追加するためのCitrix ADCポリシー


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-->

作業URIを新しい形式にリダイレクトする

次のような作業中の URL のセットがあるとします。


/index.php?id=nnnn

<!--NeedCopy-->

これらの URL を /nnnn に変更し、検索エンジンがインデックスを新しい URI 形式に更新するようにするには、次の操作を行う必要があります。

  • 検索エンジンがインデックスを更新するように、古いURIを新しいURIにリダイレクトします。
  • 新しいURIを古いURIに書き直して、index.phpスクリプトが正しく実行されるようにします。

これを行うには、クエリ文字列にマーカーコードを挿入し(マーカーコードが訪問者に表示されないようにする)、index.php スクリプトのマーカーコードを削除します。

次の例では、クエリ文字列にマーカーが存在しない場合にのみ、古いリンクから新しい形式にリダイレクトします。新しい形式を使用するリンクが古い形式に再書き込まれ、クエリ文字列にマーカーが追加されます。

Apache mod_rewrite solution


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

<!--NeedCopy-->

選択したページにセキュアサーバが使用されていることの確認

選択したWebページにセキュリティで保護されたサーバーのみが使用されるようにするには、次のApache mod_rewriteコードまたはCitrix ADCレスポンダーポリシーを使用できます。

Apache mod_rewrite solution


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

<!--NeedCopy-->

正規表現を使用したCitrix ADCソリューション


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

<!--NeedCopy-->

パターンセットを使用したCitrix ADCソリューション


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

<!--NeedCopy-->
Apache mod_rewrite ルールのデフォルト構文への移行

この記事の概要