Note that you do not want to write:
Alias /somewhere_else/ /usr/www/APACHE3/somewhere_else
The trailing / on the alias will prevent things working. To
understand this, imagine that you start with a web server that has a
subdirectory called fred in its
DocumentRoot
. That is, there’s a
directory called /www/docs/fred, and the Config
file says:
DocumentRoot /www/docs
The URL http://your.webserver.com/fred fails because there is no file called fred. However, the request is redirected by Apache to http://your.webserver.com/fred/, which is then handled by looking for the directory index of /fred.
So, if you have a web page that says:
<a href="/fred">Take a look at fred</a>
it will work. When you click on “Take a look at fred,” you get redirected, and your browser looks for:
http://your.webserver.com/fred/
as its URL, and all is well.
One day, you move fred to /some/where/else. You alter your Config file:
Alias /fred/ /some/where/else
or, equally ill-advisedly:
Alias /fred/ /some/where/else/
You put the trailing / on the aliases because you wanted to refer to a directory. But either will fail. Why?
The URL http://your.webserver.com/fred fails because there is no file /www/docs/fred anymore. In spite of the altered line in the Config file, this is what the URL still maps to, because /fred doesn’t match /fred/, and Apache no longer has a reason to redirect.
But using this Alias
(without the trailing / on
the alias):
Alias /fred /some/where/else
means that http://your.webserver.com/fred maps to /some/where/else instead of /www/docs/fred. It is once more recognized as a directory and is automatically redirected to the right place.
Note that it would be wrong to make Apache detect this and do the redirect, because it is legitimate to actually have both a file called fred in /www/docs and an alias for /fred/ that sends requests for /fred/* elsewhere.
It would also be wrong to make Apache bodge the URL and add a trailing slash when it is clear that a directory is meant rather than a filename. The reason is that if a file in that directory wants to refer visitors to a subdirectory .../fred/bill, the new URL is made up by the browser. It can only do this if it knows that fred is a directory, and the only way it can get to know this is if Apache redirects the request for .../fred to /fred/.
The same effect was produced on our system by leaving the
ServerName
directive outside the
VirtualHost
block. This is because, being outside
the VirtualHost
block, it doesn’t
apply to the virtual host. So the previously mentioned redirect
doesn’t work because it uses
ServerName
in autogenerated redirects. Presumably
this would only cause a problem depending on IPs, reverse DNS, and so
forth.