Rick,

I do virtual servers so my layout may have additional depth to it that you 
don't need (and it doesn't directly answer your question but may give you some 
food for thought) but the folks up a Rochester pointed out that they liked it 
when I did a UCD session at the end of 1998 (brief pause while I pat myself on 
the back).

I start out with a web directory at the root of the root file system. You could 
call it something along the lines of webroot but the name is not that important.

Underneath that, I create a directory for each site. Again, name doesn't matter 
but I make them match the host name less the common part of the name. For 
example, if I have http://reallycoolsite.thomsonlearning.com, I'd have a 
directory called reallycoolsite under webroot.

Underneath each site directory, I create an images directory and directories 
for log analysis reports and a few other tools we give each site owner. This is 
typically as deep as I do directory structures but the people maintaining the 
content typically create individual directories for style sheets, javascripts, 
and any files included via SSI's.

Net.Data macros go in their own directory under the main directory (webroot). 
It's a bad idea to put the macros underneath the web root for each virtual site 
since someone could get the web server to dump out your raw macro if you forget 
to deny access to the directory.

I also create a directory for things common to all sites (corporate logos and 
stuff related to HTML versions of our invoices) and either create a global 
mapping in the server or symbolic links as needed.

Here's an example:

The directory structure ends up being:
/websites
 |-common_images
 |-macros
 |-reallycoolsite
 | |-css
 | |-images
 | |-includes
 | |-javascript

Your httpd.conf would have this in it:

<VirtualHost your.ip.address>
   ServerName reallycoolsite.somethin.com
   AlwaysDirectoryIndex On
   DirectoryIndex index.html
   DocumentRoot /websites/reallycoolsite
   UseCanonicalName Off
   HostNameLookups off
   IndexOrderDefault Ascending Name CaseSense
   <Directory /websites/reallycoolsite>
      order allow,deny          
      allow from all
   </Directory>
</VirtualHost>

which enables serving of anything under /websites/reallycoolsite.

I keep CGI programs in a library called CGIBIN. Here's the configuration I use 
for them and it's at the global level:
ScriptAlias /cgibin /qsys.lib/cgibin.lib
<Directory /qsys.lib/cgibin.lib>
   order allow,deny
   allow from all
</Directory>

Net.Data's also a CGI program but I want to refer to it as /db2www instead of 
/cgibin/db2www.pgm so I add the following at the global level:

ScriptAlias /db2www/ /qsys.lib/cgibin.lib/db2www.pgm/

The directory container I added above takes care of permissions.

To get access to /websites/common_images, you can either add a global mapping:

Alias /common_images /websites/common_images
<Directory /websites/common_images>
   order allow,deny          
   allow from all
</Directory>

or you can create a symbolic link:

ADDLNK OBJ('/websites/common_images') 
NEWLNK('/websites/reallycoolsite/common_images') LNKTYPE(*SYMBOLIC)

and then add Options +FollowSymLinks to your httpd.conf.

Finally, to turn on SSI's, add the following:

Options +Includes (note: you can just add +Includes to your existing options 
list)
AddOutputFilter INCLUDES .shtml
AddOutputFilter INCLUDES .htm
AddOutputFilter INCLUDES .html
AddOutputFilter INCLUDES .pgm

This allows the server to parse both HTML pages and CGI programs (including 
Net.Data since it's runtime is also a .pgm type object) for SSI tags.

What this makes available is the following URL's:

http://reallycoolsite.somethin.com
http://reallycoolsite.somethin.com/cgibin
http://reallycoolsite.somethin.com/common_images
http://reallycoolsite.somethin.com/css
http://reallycoolsite.somethin.com/db2www
http://reallycoolsite.somethin.com/images
http://reallycoolsite.somethin.com/includes
http://reallycoolsite.somethin.com/javascript

When I need to refer to an image (or a CSS file, or anything else) from either 
a CGI program or a Net.Data macro, I also use an absolute path 
(/images/fred.jpg) so I don't have to worry about how many double dot's I need 
to make stuff work. If you don't use common templates for the pages, this isn't 
much of an issue but if you use the same templates at various levels within the 
site, it's just about impossible to use relative links. Also, it makes it 
easier for browser's to cache stuff which makes the page load quicker for your 
customers and reduce load on your server.

One situation I do have that's a slight twist on what you're doing is our B2B 
online store is shared by a bunch of virtual sites. In order to make it easier 
to track who's using the store in the log analysis reports, I've created 
various alias' to give each site it's own virtual directory.

Finally, I highly recommend that you take a look at the first few chapters of 
the book "Professional Apache 2.0". These chapters are introductory and covers 
a lot of this type of stuff. Besides that, the book is great for understanding 
how to configure an Apache based HTTP server.

Matt

-----Original Message-----
From: rick baird [mailto:rick.baird@xxxxxxxxx]
Sent: Tuesday, January 18, 2005 4:22 PM
To: web400@xxxxxxxxxxxx
Subject: [WEB400] The proper way to set up your directory stucture for
webserving


I'm having a brain seizure, and i'm looking for some direction on the
'BEST' way of organizing web document directories.

I'm on V5R3, using apache for static pages and some homespun CGI (the
hard way) programs.

I want to begin using net.data and CGIDEV as well, and I'm having
difficulty deciding the proper way to set up my directory structure,
but before I do, I want to make sure I don't paint myself into a
corner by doing it wrong.

How do you all organize your directories?     by document type and
then application?  or by application and document type.  What about
images, static pages or net.data macros that could be used in several
different applications?

Mostly, I'm concerned about my html (static and generated) will be
able to easily 'find' my images, other pages, other links, etc.
without having to specify full path's to those objects, and to easily
navigate between static pages, cgi and net.data links.

for instance, can you think of anything functionally different between
the following:

/live/common/html/...
/live/common/images/...
/live/common/netdatamacros/...
/live/application1/html/...
/live/application1/images/...
/live/application1/netdatamacros/...
/live/application2/html/...
/live/application2/images/...
/live/application2/netdatamacros/...
/test/application1/html/...
/test/application1/images/...
/test/application1/netdatamacros/...
/test/application2/html/...
/test/application2/images/...
/test/application2/netdatamacros/...

and this:?

/live/html/common/...
/live/html/application1/...
/live/html/application2/...
/live/netdatamacros/common/...
/live/netdatamacros/application1/...
/live/netdatamacros/application2/...

etc.

or some other way of organizing?

thanks in advance,

Rick
_______________________________________________
This is the Web Enabling the AS400 / iSeries (WEB400) mailing list
To post a message email: WEB400@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/web400
or email: WEB400-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/web400.



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2022 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.