Comment On Back That URL Up

In the progression of web application developers, there is a phase during which the developer has the power to build something really useful but lacks the ability to create useful URLs. This phase is dangerous because if the application becomes widely deployed, you're likely to be stuck with a namespace that complements its lack of expressibility with an overabundance of complexity. [expand full text]
« PrevPage 1 | Page 2Next »

Re: Back That URL Up

2007-04-06 09:02 • by SpiritOfGrandeur
If only there was a command for that...

O wait is it not the '?'

Re: Back That URL Up

2007-04-06 09:16 • by bstorer

link = "<a href=" & RootLevel() & "/foo/bar.asp>bar</a>"

Seriously? I'll never understand some people.
link = "<a href=\"/foo/bar.asp\">bar</a>"

Re: Back That URL Up

2007-04-06 09:18 • by bstorer
Also, this could cause great fun if the request URL is something like /dir/dir/../dir2/../../file. Better hope the server you're running on is smart enough to refuse access below the root level...

Re: Back That URL Up

2007-04-06 09:33 • by Chris (unregistered)
130772 in reply to 130771
bstorer:
Also, this could cause great fun if the request URL is something like /dir/dir/../dir2/../../file. Better hope the server you're running on is smart enough to refuse access below the root level...


Or /dir///dir/

Re: Back That URL Up

2007-04-06 09:38 • by bstorer
130773 in reply to 130772
Chris:
bstorer:
Also, this could cause great fun if the request URL is something like /dir/dir/../dir2/../../file. Better hope the server you're running on is smart enough to refuse access below the root level...


Or /dir///dir/

Actually, I'm not up on ASP. Does Request.ServerVariables ("URL") return the URL requested, or does it return the server translated URL? In other words, does a request for /dir/../file return "/dir/../file" or simply "/file"?

Re: Back That URL Up

2007-04-06 09:52 • by GregM (unregistered)
130776 in reply to 130770
bstorer:

link = "<a href=" & RootLevel() & "/foo/bar.asp>bar</a>"

Seriously? I'll never understand some people.
link = "<a href=\"/foo/bar.asp\">bar</a>"


That would work, were it not for it trying to keep the first two portions of the path when in development mode:

/dev/dir/foo/bar.asp instead of /foo/bar.asp

Re: Back That URL Up

2007-04-06 09:56 • by Anonymous (unregistered)
Okay, we get it. VB programmers always write basic string functions from scratch using Mid(), and they always get it wrong.

I swear, if i see For...Mid...InStr one more time...

Re: Back That URL Up

2007-04-06 10:03 • by Satanicpuppy
130778 in reply to 130777
'finds the root level. good for use on pages than may
'span multiple directories, such as 404 and 500 error
'pages.


Because configuring your web server to serve these out of a standard directory is something only other people do.

Seriously. I know I'm weird in that I do servers AND code, but if you do web design you should sort of understand how web servers work, so as not to create abortions like this.

Re: Back That URL Up

2007-04-06 10:08 • by bstorer
130779 in reply to 130776
GregM:
bstorer:

link = "<a href=" & RootLevel() & "/foo/bar.asp>bar</a>"

Seriously? I'll never understand some people.
link = "<a href=\"/foo/bar.asp\">bar</a>"


That would work, were it not for it trying to keep the first two portions of the path when in development mode:

/dev/dir/foo/bar.asp instead of /foo/bar.asp

Which is why a development server should simply be given a different root directory.

Re: Back That URL Up

2007-04-06 10:22 • by Freddy Bob (unregistered)

for iLoop = 1 to iCount
RootLevel = RootLevel & "../"
next

Forgive my ignorance here (or bless it) but is that recursing? Inside a loop?

Re: Back That URL Up

2007-04-06 10:22 • by pauluskc
130782 in reply to 130779
bstorer:
GregM:
bstorer:

link = "<a href=" & RootLevel() & "/foo/bar.asp>bar</a>"

Seriously? I'll never understand some people.
link = "<a href=\"/foo/bar.asp\">bar</a>"


That would work, were it not for it trying to keep the first two portions of the path when in development mode:

/dev/dir/foo/bar.asp instead of /foo/bar.asp

Which is why a development server should simply be given a different root directory.

too simple. this was an "Enterprise Application" - simple is paradoxical to enterprise. Duh!

Re: Back That URL Up

2007-04-06 10:22 • by jedifreeman
this is why I like ASP.NET...

link = "<a href='" + Page.ResolveUrl("~/foo/bar.aspx") + "'>bar</a>";
works sooo much better!

Re: Back That URL Up

2007-04-06 10:30 • by SomeCoder (unregistered)
130784 in reply to 130781
Freddy Bob:

for iLoop = 1 to iCount
RootLevel = RootLevel & "../"
next

Forgive my ignorance here (or bless it) but is that recursing? Inside a loop?



No, that's how you handle return values for functions in VB. The automatic return value is a variable with the same name as your function. It's one of VB's syntax oddities.

I really hate VB.

Re: Back That URL Up

2007-04-06 10:32 • by rmr
130785 in reply to 130781
No, in VB you set the return value by assigning to the name of the function.

Re: Back That URL Up

2007-04-06 10:35 • by Shinobu (unregistered)
130786 in reply to 130781
Freddy Bob:

for iLoop = 1 to iCount
RootLevel = RootLevel & "../"
next

Forgive my ignorance here (or bless it) but is that recursing? Inside a loop?
Which is why I call bollocks on this one. If the URL contains a "/" then iCount will be greater than zero. Which means RootLevel will be called from within the above loop. Considering URL has not changed, this means... infinite recursion! Yay!

Re: Back That URL Up

2007-04-06 10:43 • by Shinobu (unregistered)
130787 in reply to 130786
Shinobu:
Which is why I call bollocks on this one. If the URL contains a "/" then iCount will be greater than zero. Which means RootLevel will be called from within the above loop. Considering URL has not changed, this means... infinite recursion! Yay!
Bleep... see the comments above. Please forgive my ignorance too. Even though I knew that assigning to the function name sets the return value, I didn't know that you could also read it. Although that is a bit odd, considering the very same syntax outside that function denotes a call.

Re: Back That URL Up

2007-04-06 10:43 • by Russ (unregistered)
130788 in reply to 130778
Satanicpuppy:
'finds the root level. good for use on pages than may
'span multiple directories, such as 404 and 500 error
'pages.


Because configuring your web server to serve these out of a standard directory is something only other people do.

Seriously. I know I'm weird in that I do servers AND code, but if you do web design you should sort of understand how web servers work, so as not to create abortions like this.


Well it said that this application is in VB6, which means ASP, which most likely means IIS. If they were using XP or something, IIS only allows for a single site, so it might not be possible to set things up with virtual sites for every production site. Which is exactly the reason I use Apache even on windows.

Re: Back That URL Up

2007-04-06 10:54 • by sir_flexalot
130789 in reply to 130786
RootLevel = RootLevel & "../"


In VB, you set the return value of a function by its name from within the function. In order to get recursion, it would have to look like "RootLevel = RootLevel(xyz)"... I wish I didn't know that.

Re: Back That URL Up

2007-04-06 11:00 • by jedifreeman
130790 in reply to 130788
Russ:
Satanicpuppy:
'finds the root level. good for use on pages than may
'span multiple directories, such as 404 and 500 error
'pages.


Because configuring your web server to serve these out of a standard directory is something only other people do.

Seriously. I know I'm weird in that I do servers AND code, but if you do web design you should sort of understand how web servers work, so as not to create abortions like this.


Well it said that this application is in VB6, which means ASP, which most likely means IIS. If they were using XP or something, IIS only allows for a single site, so it might not be possible to set things up with virtual sites for every production site. Which is exactly the reason I use Apache even on windows.


even if you can only set up a single site IIS, you should be coding in such a fashion that you can deploy to a virtual directory inside of IIS just as easily.

That being said, XP is still not a good choice for production.

Re: Back That URL Up

2007-04-06 11:00 • by Tarwn (unregistered)
130791 in reply to 130773
bstorer:
Chris:
bstorer:
Also, this could cause great fun if the request URL is something like /dir/dir/../dir2/../../file. Better hope the server you're running on is smart enough to refuse access below the root level...


Or /dir///dir/

Actually, I'm not up on ASP. Does Request.ServerVariables ("URL") return the URL requested, or does it return the server translated URL? In other words, does a request for /dir/../file return "/dir/../file" or simply "/file"?


Actually it's worse than that. Request.ServerVariables("URL") returns the base URL. Basically everything except the domain portion and the querystring. I believe Request.ServerVariables("HTTP_HOST") would be what you were looking for.

Although I have to admit I am enjoying the ignorance of the people bashing VB. Not that I don't agree, VB is crap, but personally I think I would want to make sure my assumptions were correct before announcing them to the world. The [incorrect] assumption being that ASP uses VB. Thats like saying Linux and BSD are the same thing (/duck).

Re: Back That URL Up

2007-04-06 11:04 • by bahbar (unregistered)
Continuing on the vb oddities... What is the inital value of the return value, before initialized ?
Because the first
RootLevel = RootLevel & "../" 

uses an uninited RootLevel

Re: Back That URL Up

2007-04-06 11:11 • by MaW (unregistered)
130796 in reply to 130792
I'd guess at the empty string, since it's clearly a string variable, but that might be too sensible for VB.

Re: Back That URL Up

2007-04-06 11:13 • by obediah
130797 in reply to 130779
bstorer:
GregM:
bstorer:

link = "<a href=" & RootLevel() & "/foo/bar.asp>bar</a>"

Seriously? I'll never understand some people.
link = "<a href=\"/foo/bar.asp\">bar</a>"


That would work, were it not for it trying to keep the first two portions of the path when in development mode:

/dev/dir/foo/bar.asp instead of /foo/bar.asp

Which is why a development server should simply be given a different root directory.


I want to see the database code! (pseudo code, because I don't know what crazy moon language this is)


query = 'SELECT * FROM account'
CASE devel
query .= '_dev'
CASE test
query .= '_test'
query .= ' WHERE username = ' . username . ';'

Re: Back That URL Up

2007-04-06 11:13 • by MaW (unregistered)
130798 in reply to 130796
Replying to myself, of course there's no way VB can know for sure that it's a string variable, so who knows? It could take a good guess based on that it's being used on the left of a string concatenation there in its first appearance, but...

I like my languages with lots of type information in the syntax. The very thought of a function which doesn't have an explicit return type is quite awful, which doesn't help me out when I'm writing Perl.

Re: Back That URL Up

2007-04-06 11:14 • by Maurits
130799 in reply to 130792
bahbar:
Continuing on the vb oddities... What is the inital value of the return value, before initialized ?
Because the first
RootLevel = RootLevel & "../" 

uses an uninited RootLevel


VBScript auto-initializes variables to an empty variant. This stringizes to "".

Re: Back That URL Up

2007-04-06 11:33 • by Jojosh_the_Pi
130801 in reply to 130798
MaW:
I like my languages with lots of type information in the syntax. The very thought of a function which doesn't have an explicit return type is quite awful, which doesn't help me out when I'm writing Perl.


Hooray for the Variant type!

As a young programmer, for about 2 weeks, I thought that was a pretty cool feature of VB6. Never touched Variants again.

Maybe someone who's used VB more could tell of a good reason to use it. (JeffS?)

Re: Back That URL Up

2007-04-06 11:41 • by KenW
130802 in reply to 130781
Freddy Bob:

for iLoop = 1 to iCount
RootLevel = RootLevel & "../"
next

Forgive my ignorance here (or bless it) but is that recursing? Inside a loop?


Nope. In VB(A/6), that's how you assign a return value to a function. Used to be that way in Pascal, too.

Re: Back That URL Up

2007-04-06 12:16 • by Jeff S
130804 in reply to 130801
Jojosh_the_Pi:
MaW:
I like my languages with lots of type information in the syntax. The very thought of a function which doesn't have an explicit return type is quite awful, which doesn't help me out when I'm writing Perl.


Hooray for the Variant type!

As a young programmer, for about 2 weeks, I thought that was a pretty cool feature of VB6. Never touched Variants again.

Maybe someone who's used VB more could tell of a good reason to use it. (JeffS?)


You called? First off, note that this is VBScript. It is a SCRIPTING language, like javascript, and like javascript, EVERYTHING is a variant.

As for VB6, nothing forces you to use variants. that's up to you. Once again, try to take responsibility for your own code and don't blame the tools. Let's not get into the usual ignorant flame wars. Fighting ignorance is fun sometimes, but it gets old after a while.

Re: Back That URL Up

2007-04-06 12:30 • by Freddy Bob (unregistered)
130810 in reply to 130802
KenW:
Freddy Bob:

for iLoop = 1 to iCount
RootLevel = RootLevel & "../"
next

Forgive my ignorance here (or bless it) but is that recursing? Inside a loop?


Nope. In VB(A/6), that's how you assign a return value to a function. Used to be that way in Pascal, too.


Yes and no on the Pascal, hence my question.
FunctionName := 'Some string';
sets the return value but
FunctionName := FunctionName + 'some string';
or
SomeVariable := FunctionName + 'some string';
from within FunctionName would cause a recurse (and a curse again).

To get the same effect without the recursion would need.
SomeVar := 'A';
SomeVar := SomeVar + 'B';
SomeVar := SomeVar + 'C';
FunctionName := SomeVar;

Delphi (Object Pascal) made this a little clearer by introducing an implicit Result variable. Assigning to that set the return value and reading from it got the 'current' value for the function without causing recursion.

Re: Back That URL Up

2007-04-06 12:36 • by Rank Amateur
Looks like someone's taken the term "path" a little too literally.
--RA

Re: Back That URL Up

2007-04-06 12:53 • by null reference (unregistered)
130820 in reply to 130813
I'm not sure if this exists in classic ASP, but in ASP.Net there's the handy Request.ApplicationPath property, that is the application root =)

Re: Back That URL Up

2007-04-06 12:58 • by VGR
I wonder what goes through the mind of someone when they choose to use iCount as a variable name instead of slashCount or numSlashes. (Not that using good variable names would redeem this code.)

Re: Back That URL Up

2007-04-06 13:04 • by zip
130825 in reply to 130804
Jeff S:
Jojosh_the_Pi:
MaW:
I like my languages with lots of type information in the syntax. The very thought of a function which doesn't have an explicit return type is quite awful, which doesn't help me out when I'm writing Perl.


Hooray for the Variant type!

As a young programmer, for about 2 weeks, I thought that was a pretty cool feature of VB6. Never touched Variants again.

Maybe someone who's used VB more could tell of a good reason to use it. (JeffS?)


You called? First off, note that this is VBScript. It is a SCRIPTING language, like javascript, and like javascript, EVERYTHING is a variant.

As for VB6, nothing forces you to use variants. that's up to you. Once again, try to take responsibility for your own code and don't blame the tools. Let's not get into the usual ignorant flame wars. Fighting ignorance is fun sometimes, but it gets old after a while.


So there's really no good reason to use it in VB6? I'm genuinely curious to hear if there is one.

Re: Back That URL Up

2007-04-06 13:19 • by m03 (unregistered)
130828 in reply to 130823
VGR:
I wonder what goes through the mind of someone when they choose to use iCount as a variable name instead of slashCount or numSlashes. (Not that using good variable names would redeem this code.)


Based on the other variable names, I'd say they used it to denote that this is an integer.

Re: Back That URL Up

2007-04-06 13:19 • by Jeff S
130829 in reply to 130825
A variant in VB6/VBA is kind of like Object in C#/Java/VB.NET. It is used when different types of data need to be returned. Thus, you will notice that an ADO Field object's value property returns a Variant, which can then be "cast" to the correct datatype, since the fields in the recordset can of course be different types. So, it is much like object in that regard.

So, just like object, it exists for a purpose, but it can be abused. You could just declare all of your variables as "variant" (or use Option Explicit Off which has the same effect, only even worse!) and that certainly would be a bad idea, but it is not something that VB "forces" you to do.

In all truthfulness, VB<=6 is not a great language; it has many, many flaws, almost all because it is dervied from BASIC after all ! But that language was last updated in about 1999. The current VB, VB.NET is a HUGE improvement over VB6 and addresses almost all of its shortcomings, and uses the "Object" datatype instead of variants exactly the same as C# and Java and others.

Re: Back That URL Up

2007-04-06 13:22 • by Jeff S
130831 in reply to 130823
VGR:
I wonder what goes through the mind of someone when they choose to use iCount as a variable name instead of slashCount or numSlashes. (Not that using good variable names would redeem this code.)


In scripting languages where you cannot declare a variable's type explicitly, it is often useful to prefix the "hidden" type in the variable name somehow. One of the few cases in which I think hungarian notation is acceptable and even helpful, IMHO.

Re: Back That URL Up

2007-04-06 13:31 • by Bill (unregistered)
130834 in reply to 130825
zip:
Jeff S:
Jojosh_the_Pi:
MaW:
I like my languages with lots of type information in the syntax. The very thought of a function which doesn't have an explicit return type is quite awful, which doesn't help me out when I'm writing Perl.


Hooray for the Variant type!

As a young programmer, for about 2 weeks, I thought that was a pretty cool feature of VB6. Never touched Variants again.

Maybe someone who's used VB more could tell of a good reason to use it. (JeffS?)


You called? First off, note that this is VBScript. It is a SCRIPTING language, like javascript, and like javascript, EVERYTHING is a variant.

As for VB6, nothing forces you to use variants. that's up to you. Once again, try to take responsibility for your own code and don't blame the tools. Let's not get into the usual ignorant flame wars. Fighting ignorance is fun sometimes, but it gets old after a while.


So there's really no good reason to use it in VB6? I'm genuinely curious to hear if there is one.


It's just a lazy way for a function not need overrides. If all you were going to do with a variable was store it in a string, variant (now object) allows them to pass anything and the programmer could ToString it and store it.

Captcha: Darwin - he did away with variants

Re: Back That URL Up

2007-04-06 13:36 • by Shaun (unregistered)
130835 in reply to 130801
Jojosh_the_Pi:
MaW:
I like my languages with lots of type information in the syntax. The very thought of a function which doesn't have an explicit return type is quite awful, which doesn't help me out when I'm writing Perl.


Hooray for the Variant type!

As a young programmer, for about 2 weeks, I thought that was a pretty cool feature of VB6. Never touched Variants again.

Maybe someone who's used VB more could tell of a good reason to use it. (JeffS?)


There is NEVER a good reason to use variants. Okay, so everything in Classic ASP is a variant, but that is why I will never touch it again (unless there is major $ involved.)

Re: Back That URL Up

2007-04-06 13:52 • by HealthManiac (unregistered)
130837 in reply to 130787
All - This story has anonymization baked right into it.

The scripts in question were originally developed in Perl/CGI which made system calls out to some horrible Java 1.1 code.

Now that's enterprisey!

Re: Back That URL Up

2007-04-06 13:55 • by Jeff S
130839 in reply to 130835
Shaun:
Jojosh_the_Pi:
MaW:
I like my languages with lots of type information in the syntax. The very thought of a function which doesn't have an explicit return type is quite awful, which doesn't help me out when I'm writing Perl.


Hooray for the Variant type!

As a young programmer, for about 2 weeks, I thought that was a pretty cool feature of VB6. Never touched Variants again.

Maybe someone who's used VB more could tell of a good reason to use it. (JeffS?)


There is NEVER a good reason to use variants. Okay, so everything in Classic ASP is a variant, but that is why I will never touch it again (unless there is major $ involved.)


You must completely avoid all scripting languages then, right?

It might help you to read my previous post. There's lots of good reasons to use and/or return variants in your code, just as there are to use Objects in other languages. And like anything, there are ways to use them properly and ways to abuse them.

Re: Back That URL Up

2007-04-06 14:03 • by Bert (unregistered)
A few observations:

1. IIS supports multiple IPs, multiple web sites, multiple "apps" per website, multiple virtual directories per website, etc. It gives you the ability to configure these however you need.

2. If a developer is not given the privileges to exploit these features, then you wind up with scenarios like this WTF. Here is a sample email to elucidate.

From: IIS Admin
To: Jane Developer
Subj: IIS request

Jane, I setup your area on the dev server as requested; you can access it as follows:

file system: \\devserver\jane
browser: http://devserver/dev/jane

Remember production looks like this:
browser: http://prodserver

Good luck!
IIS Admin
P.S. Hopefully, we will have a QA server soon that looks like http://qaserver where you will be able to test your changes before they go production.

3. The IIS admin (and or development policy) should really be forcing the developers to code to the site level.

4. I think a prevous poster made an allusion to the fact that you could use a "Global" variable at an IIS "app" level to try to solve this, but I hate globals. A better approach would be a DNS entry, and an IIS host header entry.
file system: \\devserver\jane
browser: http://devjane

5. I really peeved our IIS admin when I showed her how easy it was to use the host header to support thousands of web sites on one IIS server. (She was physically shaking) Yeah for HTTP 1.1! After 5 years they finally let me tweak the DEV server, but a network admin is needed tweak the DNS. (Many times I will skip the DNS and just use the local system32/drivers/etc/hosts)

Re: Back That URL Up

2007-04-06 14:45 • by Borat (unregistered)
130842 in reply to 130781
No, it's not recursing.

Re: Back That URL Up

2007-04-06 14:59 • by to be a sr dev is to stop learning (unregistered)
As a jr. developer, it's easy to catch yourself listening to the wrong people. People who know nothing about what they are talking about! People who don't read all the comments of a post! As Jeff S. stated earlier, in classic ASP, you use VBScript. VBScript != VB6. Everything is a variant. No explicit type declaration allowed. With that said, all you "gurus" bashing other languages, need to step off! All languages, just like coders, have thier good and bad points. It's those points that determine when and what language someone uses, if they have a choice in the matter at all.

captcha "ewww". I think someone caused a stink?

Re: Back That URL Up

2007-04-06 16:14 • by RobertB
130857 in reply to 130777
Anonymous:
Okay, we get it. VB programmers always write basic string functions from scratch using Mid(), and they always get it wrong.

I swear, if i see For...Mid...InStr one more time...

To be fair, VB didn't have any decent string manipulation functions when it started out. I could go through and replace about a dozen for..next loops with Replace()... except that there's usually some side effect that some calling function requires. I ought to find something particularly egregious and post it -- shouldn't be hard to find one.

As for Variants, I'll tell you when you use Variants. You use them because the programmer before you coded the common routine (the one that you don't dare touch because it barely works anyway) like this:
Public Function EssentialFoo(File, Name As String)

... which not only returns a Variant by default, but also has the first of the two parameters ("File") defined as a Variant by default. In effect, it's really declared like this:
Public Function EssentialFoo(File As Variant, Name As String) As Variant

Passing a non-variant to the function results in the dreaded Type Mismatch... sometimes. Variants are teh ev1l.

Re: Back That URL Up

2007-04-06 16:34 • by Phineas Balmer (unregistered)
Basically, the purpose is to create a relative path to the root folder (of the web application) based on the current folder (where the web page being executed resides.) This may or may not be the document root for the configured website.

In my experience, we usually use a configuration and store it in the application cache (global variables for ASP). This only needs to be loaded once when the web application starts and you would make a reference to this in your ASP code with something like:

<img src=<%= Application("SiteRoot") %>/images/...

You could also define a shorter variable in the site-wide configuration file to save typing. For instance:

cfgRoot = Application("SiteRoot")

Re: Back That URL Up

2007-04-06 16:38 • by ben (unregistered)
130859 in reply to 130858
Is there something wrong with "/" that I'm missing?

And, OK, if your site root is something wacky for whatever reason, isn't that what apache conf (or equivalent) is for?

I can't see any reason for needing to store the site root in a variable at all. If you really must, it's not hard, but why?

Re: Back That URL Up

2007-04-06 17:26 • by mike5 (unregistered)
Well, no sense in jumping directly to root. All those folder in between might feel a little bit left out....

Re: Back That URL Up

2007-04-06 17:54 • by Holli (unregistered)
130870 in reply to 130789
... I wish I didn't know that.

LOL! Boy you just made my day.

Re: Back That URL Up

2007-04-06 17:55 • by chrismcb
130872 in reply to 130831
Jeff S:
VGR:
I wonder what goes through the mind of someone when they choose to use iCount as a variable name instead of slashCount or numSlashes. (Not that using good variable names would redeem this code.)


In scripting languages where you cannot declare a variable's type explicitly, it is often useful to prefix the "hidden" type in the variable name somehow. One of the few cases in which I think hungarian notation is acceptable and even helpful, IMHO.


I don't understand why people dislike hungarian in a well typed language?

So when you are reading the code, in this well typed language, and you see a variable "foo." What type is it?

Re: Back That URL Up

2007-04-06 18:03 • by Anonymous coward! (unregistered)
130873 in reply to 130840
Bert:
A few observations:

1. IIS supports multiple IPs, multiple web sites, multiple "apps" per website, multiple virtual directories per website, etc. It gives you the ability to configure these however you need.


Not on XP, it doesn't. WinXP limits you to one *active* web site. Under that, have all the fun with all the virdirs you want, but you can only have on active web site.

So if this were running on XP, it could hose you.
« PrevPage 1 | Page 2Next »

Add Comment