4.11 Apache URLの書き換え

LANSA Integrator

4.11 Apache URLの書き換え


Apacheサーバーでは、書き換えディレクティブを使用してURL操作を行う強力な方法が提供されます。

詳細は、以下を参照してください。

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

以下の例は、これらの書き換えディレクティブの使用方法を示しています。

例1

URL:"/myservice?request=xml&service=neworder" を "/cgi-bin/jsmdirect?neworder" に書き換え 

サンプルURL:http://10.2.0.170:1099/myservice?request=xml&service=neworder

URLにサービス名の値のペアが含まれる場合、/cgi-bin/jsmdirect?<値>が呼び出されます。そうでない場合は、/cgi-bin/jsmdirect?defaultが呼び出されます。

RewriteCond %{QUERY_STRING} service\=([^\&]+)

RewriteRule ^/myservice(.*) /cgi-bin/jsmdirect?%1 [L,PT]

RewriteRule ^/myservice(.*) /cgi-bin/jsmdirect?default [L,PT]

RewriteCondは、service=のQUERY_STRINGをチェックして、&以外の値をパラメータ化します。

条件が真の場合、次のRewriteRuleを実行します。真でなければこのルールはスキップされ、他のルールが実行されます。

注:

RewriteRuleディレクティブでクエリー文字列は使用できません。

クエリー文字列は、mod_rewriteがディレクトリごとのコンテキストで有効になるまでにquery_string環境変数に移動しています。

RewriteCondは、その後の最初のRewriteRuleにのみ有効です。

以降のRewriteRuleには適用されないため、%1の後方参照は、2番目、3番目、以降のRewriteRuleに対して未定義になります。

例2

URL:"/parts/00345" を "/cgi-bin/jsmdirect?orderbind+id(00345)" に書き換え

サンプルURL:http://10.2.0.170:1099/parts/00345

RewriteRule ^/parts/(.*) /cgi-bin/jsmdirect?orderbind+id($1) [L,PT]

例3

URL:"/parts/00345/abc" を "/cgi-bin/jsmdirect?orderbind+id(00345)+item(abc)" に書き換え

サンプルURL:http://10.2.0.170:1099/parts/00345/abc

RewriteRule ^/parts/(.*)/(.*) /cgi-sec/jsmdirect?orderbind+id($1)+item($2) [L,PT]

Apache構成ファイルのサンプル

# Apache構成 - JSMサービス

Options None

Listen 10.2.0.170:1099

ServerRoot /www/jsmapache

DocumentRoot /www/jsmapache/htdocs

# DefaultFsCCSID  37

# DefaultNetCCSID 819

# ServerUserID USERPROFILE

#

LogLevel Warn

LogCycle Daily

ErrorLog logs/error_log

CustomLog logs/access_log combined

LogFormat "%{User-agent}i" agent

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{Cookie}n \"%r\" %t" cookie

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

#

SetEnvIf "User-Agent" "Mozilla/2" nokeepalive

SetEnvIf "User-Agent" "JDK/1\.0" force-response-1.0

SetEnvIf "User-Agent" "Java/1\.0" force-response-1.0

SetEnvIf "User-Agent" "RealPlayer 4\.0" force-response-1.0

SetEnvIf "User-Agent" "MSIE 4\.0b2;" nokeepalive

SetEnvIf "User-Agent" "MSIE 4\.0b2;" force-response-1.0

#

# StartCGI 1

# SendBufferSize 32768

# ReceiveBufferSize 32768

#

#ユーザー名ベースの仮想ホスティング

NameVirtualHost 10.2.0.170

#

<VirtualHost 10.2.0.170>

  #最初の仮想ホストのディレクティブが省略値のホストになる

  #これは、サポートされないまたはホスト名がないIPアドレスの使用を捕捉する

  #ドキュメントのルート・ディレクトリにアクセスする権限もない

  Options None

  ServerName 10.2.0.170

  DocumentRoot /www/jsmapache/htdocs

</VirtualHost>

#

<VirtualHost 10.2.0.170>

  Options None

  ServerName LANSA01

  ServerAlias LANSA01.LANSA.COM.AU

  DocumentRoot /www/jsmapache/htdocs-site1

  CGIConvMode BINARY

  ErrorDocument 403 /noaccess.html

  ErrorDocument 404 /notfound.html

  ScriptAliasMatch ^/cgi-bin/jsmproxy(.*) /qsys.lib/devjsm.lib/jsmproxy.pgm$1

  ScriptAliasMatch ^/cgi-bin/jsmdirect(.*) /qsys.lib/devjsm.lib/jsmdirect.pgm$1

  ScriptAliasMatch ^/cgi-sec/jsmdirect(.*) /qsys.lib/secure.lib/jsmdirect.pgm$1

  TimeOut 3000

  #

  RewriteEngine On

  # RewriteLog rewrite-site1.log

  # RewriteLogLevel 9

  #

  RewriteCond %{REQUEST_METHOD} ^TRACE

  RewriteRule .* - [L,F]

  #

  RewriteRule ^/parts/(.*)/(.*) /cgi-sec/jsmdirect?orderbind+id($1)+item($2) [L,PT]

  RewriteRule ^/parts/(.*) /cgi-bin/jsmdirect?orderbind+id($1) [L,PT]

  RewriteRule ^/parts /cgi-bin/jsmdirect?orderbind+id(*NONE) [L,PT]

  #

  RewriteCond %{QUERY_STRING} service\=([^\&]+)

  RewriteRule ^/myservice(.*) /cgi-bin/jsmdirect?%1 [L,PT]

  RewriteRule ^/myservice(.*) /cgi-bin/jsmdirect?default [L,PT]

  #

  RewriteCond %{TIME_HOUR}%{TIME_MIN} >0905

  RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900

  RewriteRule ^/mypage.html /day.html [L]

  RewriteRule ^/mypage.html /night.html [L]

  #

  # RewriteCond %{TIME_HOUR}%{TIME_MIN} <1300 [OR]

  # RewriteCond %{TIME_HOUR}%{TIME_MIN} >1500

  # RewriteRule ^/cgi-bin/jsmdirect(.*) /noaccess.html [L]

  #

  # RewriteMap companymap txt:/www/jsmapache/company.map

  # RewriteRule ^/company/(.*) ${companymap:$1|http://nocompany.com} [L,R]

  #

  # RewriteMap hostmap rnd:/www/jsmapache/randomhost.map

  # RewriteRule ^/(.*\.(pdf|gif|jpg)) http://${hostmap:static}/$1 [L,R]

  #

  <Directory /www/jsmapache/htdocs-site1>

    Options None

    Order Allow,Deny

    Allow from all

    AllowOverride None

  </Directory>

  #

  <Directory /qsys.lib/devjsm.lib>

    Options None

    Order Allow,Deny

    Allow from all

    AllowOverride None

    #有効なユーザーが必要

    #認証タイプ Basic

    #認証名"Restricted Service"

    #ユーザーID QTMHHTP1

    # パスワード・ファイル %%SYSTEM%%

  </Directory>

  #

  <Directory /qsys.lib/secure.lib>

    Options None

    Order Allow,Deny

    Allow from all

    AllowOverride None

    Require valid-user

    AuthType Basic

    AuthName "Restricted Service"

    #ユーザーID QTMHHTP1

    PasswdFile %%SYSTEM%%

  </Directory>

</VirtualHost>

#

<VirtualHost 10.2.0.170>

  Options None

  ServerName STUDIOADMIN

  DocumentRoot /www/jsmapache/htdocs-site2

  CGIConvMode BINARY

  ScriptAliasMatch ^/cgi-bin/jsmadmin(.*) /qsys.lib/devjsm.lib/jsmadmin.pgm$1

  #

  <Directory /www/jsmapache/htdocs-site2>

    Options None

    Order Allow,Deny

    Allow from all

    AllowOverride None

  </Directory>

  #

  <Directory /qsys.lib/devjsm.lib>

    Options None

    Order Allow,Deny

    Allow from 10.2.1.46

    Allow from 10.2.1.47

    Allow from 10.2.1.48

    AllowOverride None

  </Directory>

</VirtualHost>

#

#グローバル・サーバー・ディレクティブ

#

<Directory />

  Options None

  Order Allow,Deny

  Deny from all

  AllowOverride None

</Directory>

#

<Directory /www/jsmapache/htdocs>

  Options None

  Order Allow,Deny

  Deny from all

  AllowOverride None

</Directory>