OpenCms URLs
Cschoenfeld (Talk | contribs) m (info about special case for systempath) |
Cschoenfeld (Talk | contribs) m (→Formal URL Syntax and request URL translation process) |
||
Line 17: | Line 17: | ||
The ''Site'' is matched against the servers defined in ''opencms-system.xml''. The matching site is selected as the ''current site'' to serve the request. | The ''Site'' is matched against the servers defined in ''opencms-system.xml''. The matching site is selected as the ''current site'' to serve 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 '' | + | 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. | When a ''SystemPath'' is requested no translation is applied. |
Revision as of 17:00, 30 January 2007
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.
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 is selected as the current site to serve 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
- /sites/default/index.jsp if called from a logged in browser (e.g. from the Explorer)
- /sites/default/sites/default/index.jsp if called from a logged out browser (HTTP 404)
Explanation: The effects of URL translation
It makes sense to distinguish internal and external URLs: The ResourcePath of internal URLs is always the absolute VFS path whereas the ResourcePath for external URLs must always be relative to the configured uri attribute of the site server that matches the request URL.
The correct external URL for the file /sites/default/index.jsp therefore is http://localhost:8080/opencms/opencms/index.jsp.
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.