4.11 Apache URL の書き換え

Apache サーバーでは、書き換えディレクティブを使用して URL 操作を行う強力な方法が提供されます。
詳細は、Apache HTTP サーバー・バーション 2.4 の「&<a href=" target="_blank"&>http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html"Apache モジュール mod_rewrite&</a&>」を参照してください。
以下の例は、これらの書き換えディレクティブの使用方法を示しています。
例 1
書き換えURL:"/myservice.jsp?request=xml&service=neworder" を "/cgi-bin/jsmdirect?neworder" に
サンプル URL: http://10.2.0.170:1099/myservice.jsp?request=xml&service=neworder
URL にサービス名と値のペアが含まれる場合、/cgi-bin/jsmdirect?<値> が呼び出されます。それ以外の場合は、/cgi-bin/jsmdirect?default が呼び出されます。
RewriteCond %\{QUERY_STRING\} service\=(\[^\&\]+)
RewriteRule ^/myservice.jsp(.*) /cgi-bin/jsmdirect?%1 \[L,PT\]
RewriteRule ^/myservice.jsp(.*) /cgi-bin/jsmdirect?default \[L,PT\]
 
RewriteCond は、service= の QUERY_STRING をチェックして、& 以外の値をすべてパラメータ化します。
条件が真の場合、次の RewriteRule を実行します。真でなければこのルールはスキップされ、他のルールが実行されます。
         注:

例 2
書き換えURL:" /myservice.jsp?type=2&msgid=AXD&status=NEW" を "/cgi-bin/jsmdirect?myservice+type(2)msgid(AXD)+status(NEW)" に
RewriteRule ^/myservice.jsp /myservice.jsp/%\{QUERY_STRING\} \[C\]
RewriteRule ^/myservice.jsp/type=(\[^\&\]+)&msgid=(\[^\&\]+)&status=(\[^\&\]+) \
   /cgi-bin/jsmdirect?myservice+type($1)+msgid($2)+status($3) \[L,PT\]
 
例 3
書き換え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\]
 
例 4
書き換え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-bin/jsmdirect?orderbind+id($1)+item($2) \[L,PT\]
 
Apache 構成ファイルのサンプル

  1. Apache 構成 - JSM サービス
    Options None
    Listen 10.2.0.170:1099
    ServerRoot /www/jsmapache
    DocumentRoot /www/jsmapache/htdocs
  2. DefaultFsCCSID  37
  3. DefaultNetCCSID 819
  4. 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
    #
  5. StartCGI 1
  6. SendBufferSize 32768
  7. ReceiveBufferSize 32768
    #
  8. 名前ベースの仮想ホスティングを使用
    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 SERVER1
      ServerAlias SERVER1.ACME.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>
    #
  9. グローバル・サーバー・ディレクティブ
    #
    <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>