View Source

                                                                                                                                                                                                                                                                                                                                      *Back to [[Book|Administrator's Configuration File Reference#cfr]]     [[Topic|Administrator's Configuration File Reference#chap6]]*
h2. Objects in {{obj.conf}}

Directives in the {{obj.conf}} file are grouped into {{Object}} tags. The {{default}} object contains instructions to the server on how to process requests by default. Each new object modifies the {{default}} object’s behavior.

An {{Object}} tag may contain a {{name}} or {{ppath}} attribute. Either parameter can be a wildcard pattern. For example:
{code}
<Object name="cgi">
{code}
{code}
<Object ppath="/usr/sun/webserver7/https-server/docs/private/*">
{code}

The server always starts handling a request by processing the directives in the {{default}} object. However, the server switches to processing directives in another object after the {{NameTrans}} stage of the {{default}} object if either of the following conditions is true:
* The successful {{NameTrans}} directive specifies a {{name}} argument.
* The physical path name that results from the {{NameTrans}} stage matches the {{ppath}} attribute of another object.

When the server is alerted to use an object other than the {{default}} object, it processes the directives in the other object before processing the directives in the {{default}} object. For some steps in the process, the server stops processing directives in that particular stage (such as the {{Service}} stage) as soon as one is successfully executed, whereas for other stages the server processes all directives in that stage, including the ones in the {{default}} object as well as those in the additional object. For more details, see [Flow of Control in obj.conf].

h3. Objects That Use the name Attribute

If a {{NameTrans}} directive in the {{default}} object specifies a {{name}} argument, the server switches to processing the directives in the object of that name before processing the remaining directives in the {{default}} object.

For example, the following {{NameTrans}} directive in the {{default}} object assigns the name {{cgi}} to any request whose URL starts with {{http://}}_server_name_{{/cgi}}:
{code}
<Object name="default">
NameTrans fn="pfx2dir"
from="/cgi"
dir="D:/sun/webserver7/https-server/docs/mycgi"
name="cgi"
...
</Object>
{code}

When the {{NameTrans}} directive is executed, the server starts processing directives in the object named {{cgi}}:
{code}
<Object name="cgi">
...
</Object>
{code}

h3. Objects That Use the ppath Attribute

When the server completes processing the {{NameTrans}} directives in the {{default}} object, the logical URL of the request has been converted to a physical path name. If this physical path name matches the {{ppath}} attribute of another object in {{obj.conf}}, the server switches to processing the directives in that object before processing the remaining ones in the {{default}} object.

For example, the following {{NameTrans}} directive translates the {{http://}}_server_name_{{/}} part of the requested URL to {{D:/sun/webserver7/https-server/docs/}}, the document root directory:
{code}
<Object name="default">
NameTrans fn="document-root"
root="D:/sun/webserver7/https-server/docs"
...
</Object>
{code}

In this example, the URL {{http://}}_server_name_{{/internalplan1.html}} is translated to {{D:/sun/webserver7/https-server/docs/internalplan1.html}}.

However, if {{obj.conf}} contains the following additional object:
{code}
<Object ppath="*internal*">

</Object>
{code}

In this example, the partial path {{* internal *}} matches the path {{D:/sun/webserver7/https-server/docs/internalplan1.html}}. The server starts processing the directives in this object before processing the remaining directives in the {{default}} object.

h3. Using the Client, If, ElseIf, and Else Tags

Additional tags are available to use within the {{Object}} tag. These tags give you greater flexibility when invoking directives within an object. This section contains the following sections:
* [#Client]
* [#If, ElseIf, and Else]

h4. Client {anchor:conf61}

The {{Client}} tag enables you to limit the execution of a set of directives to requests received from specific clients. Directives listed within the {{Client}} tag are executed only when information in the client request matches the parameter values specified.

h5. Client Tag Parameters

The following table lists the {{Client}} tag parameters.

Table&nbsp;6-1 Client Tag Parameters
||Parameter ||Description ||
|{{browser}} |The {{User-Agent}} string sent by a browser to the Web Server. |
|{{chunked}} |A Boolean value set by a client requesting chunked encoding. |
|{{code}} |The HTTP response code. |
|{{dns}} |The DNS name of the client. |
|{{internal}} |The Boolean value indicating internally generated request. |
|{{ip}} |The IP address of the client. |
|{{keep-alive}} |The Boolean value indicating whether the client has requested a keep-alive connection. |
|{{keysize}} |The key size used in an SSL transaction. |
|{{match}} |The match mode for the {{Client}} tag. The valid values are {{all}}, {{any}}, and {{none}}. |
|{{method}} |The HTTP method used by the browser. |
|{{name}} |The name of an object as specified in a previous {{NameTrans}} statement. |
|{{odds}} |A random value for evaluating the enclosed directive. The value can be a percentage or a ratio (for example, 20% or 1/5). |
|{{path}} |The physical path to the requested resource. |
|{{ppath}} |The physical path of the requested resource. |
|{{query}} |The query string sent in the request. |
|{{reason}} |The text version of the HTTP response code. |
|{{restarted}} |A Boolean value indicating that a request has been restarted. |
|{{secret-keysize}} |The secret key size used in an SSL transaction. |
|{{security}} |Indicates an encrypted request. |
|{{type}} |The type of document requested (such as {{text/html}} or {{image/gif}}). |
|{{uri}} |The URI section of the request from the browser. |
|{{urlhost}} |The DNS name of the virtual server requested by the client (the value is provided in the {{Host}} header of the client request). |
|{{variable-headers}} |Prevents access to a specific site, based on the request by the client. For example,
{code}
Client variable-headers="Weferer:SKVFVWRKJVZCMHVIBGDA
Service type="image/*" fn="deny-existence"
</Client>
{code} |


The {{Client}} tag parameter provides greater control when the {{If}} directive is executed. In the following example, use of the {{odds}} parameter gives the request a 25% chance of being redirected:
{code}
<Client odds="25%">
NameTrans fn="redirect"
from="/Pogues"
url-prefix="http://pogues.example.com"
</Client>
{code}

One or more wildcard patterns can be used to specify the {{Client}} tag parameter values. Wildcards can also be used to exclude clients that match the parameter value specified in the {{Client}} tag. In the following example, the {{Client}} tag and the {{AddLog}} directive are combined to direct the Web Server to log access requests from all clients except those from the specified subnet:
{code}
<Client ip="*~192.85.250.*">
AddLog fn="flex-log" name="access"
</Client>
{code}

You can also create a negative match by setting the {{match}} parameter of the {{Client}} tag to {{none}}. In the following example, access requests from the specified subnet are excluded as are all requests to the virtual server {{sun.com}}:
{code}
<Client match="none" ip="192.85.250.*" urlhost="www.sun.com">
AddLog fn="flex-log" name="access"
</Client>
{code}

For more information about wildcard patterns, see [Appendix&nbsp;B: Using Wildcard Patterns|Administrator's Configuration File Reference#appB].

h4. If, ElseIf, and Else {anchor:conf62}

The {{If}}, {{ElseIf}}, and {{Else}} tags enable you to define the conditions under which to execute a set of directives. Like the {{Client}} tag, these tags can only appear inside an {{Object}} tag. In addition, these tags can evaluate an expression, then conditionally execute one or more contained directives. However, there are some key differences between the these tags and the {{Client}} tag, as summarized below:
* {{If}} and {{ElseIf}} tags offer a richer expression syntax, including support for regular expressions. This expression syntax is different from the {{Client}} syntax. For more information on the {{If}} and {{ElseIf}} expression syntax, see [Expressions].
* {{If}}, {{ElseIf}}, and {{Else}} tags can contain other tags.
* {{If}} and {{ElseIf}} expressions are evaluated once per request, not once per contained directive.
* {{If}}, {{ElseIf}}, and {{Else}} tags cannot contain multiple types of directives.
* Directives within the {{If}} and {{ElseIf}} tags can contain regular expression backreferences.

When used, an {{ElseIf}} or {{Else}} tag must immediately follow an {{If}} or {{ElseIf}} tag. {{ElseIf}} and {{Else}} tags are skipped if the preceding {{If}} or {{ElseIf}} expression evaluates to logical true.

The following example shows {{If}}, {{ElseIf}}, and {{Else}} tag syntax:
{code}
<If $path eq "/">
<If $browser =~ "MSIE">
NameTrans fn="rewrite" path="/msie.html"
</If>
<ElseIf $browser =~ "Mozilla">
NameTrans fn="rewrite" path="/mozilla.html"
</ElseIf>
<Else>
NameTrans fn="rewrite" path="/unknown.html"
</Else>
</If>
{code}


This example presents a different page based on whether the browser is Microsoft Internet Explorer, Mozilla, or another browser.

The individuals who post here are part of the extended Sun Microsystems community and they might not be employed or in any way formally affiliated with Sun Microsystems. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Sun nor any other party necessarily agrees with them.

Copyright 1994-2009 Sun Microsystems, Inc.
Powered by Atlassian Confluence
Sun Guidelines on Public Discourse Privacy Policy Terms of Use Trademarks Site Map Employment Investor Relations Contact