The following is an alternative to using define_atbegin in a LassoStartup folder for virtual URLs on Apache 2.2.
In this method because all virtual URLs get rewritten, response_filepath and response_path return the location of the URL handler, not the virtual URL. Therefore a custom tag to replace these tags is required.
Huge thanks to Bil Corry for his help and amazing skills.
----- BEGIN VIRTUAL HOST DIRECTIVES for APACHE 2.2 -----
<ifmodule mod_rewrite.c="">
# Turn mod_rewrite on.
RewriteEngine on
# Honor the server-wide rewrite rules if any exist.
RewriteOptions inherit
# Debug rewrite rules for use in development only.
# RewriteLogLevel can be 1-9.
# Configure the path to the rewrite log file.
# Do NOT enable in production or your log file will get huge quickly.
# RewriteLog /private/var/log/apache2/rewrite.log
# RewriteLogLevel 9
# Lasso gets all virtual files and directories
# that don't have an extension between 1 and 8 characters long
RewriteCond %{REQUEST_URI} !^.*\.[^.]{1,8}$
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule (.*) /_urlhandler.lasso [L,NS,PT,E=X-VIRTUAL-PATH:$1]
RequestHeader unset X-VIRTUAL-PATH
RequestHeader set X-VIRTUAL-PATH %{X-VIRTUAL-PATH}e env=X-VIRTUAL-PATH
</ifmodule>
----- END VIRTUAL HOST DIRECTIVES for APACHE 2.2 -----
----- BEGIN Custom Tag to replace response_filepath and response_path -----
[
// Overload response_filepath and response_path.
// Place in LassoStartup for the site.
define_tag('filepath',-namespace='response',-priority='high',-criteria=(params->size == 0));
local('vpath') = string;
protect;
#vpath = string_findregexp(client_headers,-find='(?im)^X-VIRTUAL-PATH:\\s*(.*)$')->get(2)->trim&;
/protect;
if(#vpath->size);
return(#vpath);
else;
return(response_filepath(-original));
/if;
/define_tag;
global('response_path') = tags_find('response_path');
define_tag('path',-namespace='response',-priority='replace');
local('vpath') = string;
local('vfilepath') = string;
protect;
#vpath = string_findregexp(client_headers,-find='(?im)^X-VIRTUAL-PATH:\\s*(.*)$')->get(2)->trim&;
#vfilepath = response_filepath->split('/')->last;
#vpath->removetrailing(#vfilepath);
/protect;
if(#vpath->size);
return(#vpath);
else;
return(global('response_path')->run);
/if;
/define_tag;
]
----- END Custom Tag to replace response_filepath and response_path -----
----- BEGIN /_urlhandler.lasso -----
[
// Optionally add logic to determine what gets processed by your framework.
content_body = include('/myframework.lasso');
content_body -> trim;
abort;
]
----- END /_urlhandler.lasso -----
Author: Steve Piercy
Created: 23 Jan 2010
Last Modified: 20 Jun 2012
Please note that periodically LassoSoft will go through the notes and may incorporate information from them into the documentation. Any submission here gives LassoSoft a non-exclusive license and will be made available in various formats to the Lasso community.
©LassoSoft Inc 2015 | Web Development by Treefrog Inc | Privacy | Legal terms and Shipping | Contact LassoSoft