OpenCms URLs

From OpenCms Wiki
Revision as of 18:17, 30 January 2007 by Cschoenfeld (Talk | contribs)
Jump to: navigation, search

The URL retrieval mechanism in OpenCms can be confusing to new users. When processing a request, OpenCms translates the requested URL to a VFS resource path before delivering the file.

The cause for misunderstanding and trouble is that translation pays attention to the current site of the request. When logged into the workspace the site can be changed with the Site select box at the top of the window. The current site of external requests (from outside the workspace) is determined automatically from the request URL.

Contents

Formal URL Syntax and request URL translation process

The formal syntax of OpenCms URLs can be written as follows:

OpenCmsUrl ::=    Site ServletPath RequestPath
Site ::=          Protocol "://" Host ":" {Port}
ServletPath ::=   "/" WebappName "/opencms"
RequestPath ::=   SystemPath | ResourcePath
SystemPath ::=    "/system/" ResourcePath
ResourcePath ::=  "/" { [PathCharacter]+ "/"? }*
PathCharacter ::= A valid file or directory name character

The Site is matched against the servers defined in opencms-system.xml. The matching site's uri attribute is selected as the current site for the request.

In order to finally determine the VFS resource path of the requested file OpenCms adds the uri attribute of the current site in front of the ResourcePath unless the uri attribute is equal to the current site of the browser session.

When a SystemPath is requested no translation is applied.

Example

Consider a request for the following URL on the OpenCms default installation:

http://localhost:8080/opencms/opencms/sites/default/index.jsp

where opencms-system.xml defines a single default site:

<sites>
  <workplace-server>http://localhost:8080</workplace-server>
  <default-uri>/sites/default</default-uri>
  <site server="http://localhost:8080" uri="/sites/default"/>
</sites>

The URL is parsed into the following elements:

Site: http://localhost:8080
ServletPath: /opencms/opencms
RequestPath: /sites/default/index.jsp

The final VFS resource path after URL translation is

  • /index.jsp if called from a logged in browser (e.g. from the Explorer) currently at site /sites/default
  • /sites/default/index.jsp if called from a logged in browser (e.g. from the Explorer) currently at site /
  • /sites/default/sites/default/index.jsp if called from a logged out browser (HTTP 404)

Explanation: The effects of URL translation

Mind this rule of thumb: The ResourcePath of an OpenCms URL must be relative to the current site.

As a side effect of this the URL of a file changes whenever the current site changes.

Example:

  1. Click on /sites/default/index.jsp while the current site is /. A preview browser window opens showing the URL http://localhost:8080/opencms/opencms/sites/default/index.jsp.
  2. Change the current site to /sites/default and hit reload in the preview window. You will see an error message.
  3. Click on /sites/default/index.jsp again. The preview browser window URL changes to http://localhost:8080/opencms/opemcms/index.jsp.

Hints

If you set the uri attribute of a site in opencms-system.xml to /, you will expose the complete VFS hierarchy. By not doing so, you can protect parts of the VFS. They will not be accessible from outside the workplace.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox