My answer if that Apache doesn't allow you to do what you are trying to do here, but that's because AFAIK you don't need to do this to do what you really need to do.
It seems as if you are trying to create a local environment that in configuration terms mirrors your (remote) server-based test environment. However you are confusing the URI namespace and the file system namespace and in Apache Server these are quite different. For example the <Location>
directive operates on the former and the <Directory>
directive operates on the latter. .htaccess
sort of cut across both so you need to understand when a parameter operates on one or the other.
For example, I have a shared service account which service a number of subdomains *.ellisons.org.uk
-- for example my blog is on http://blog.ellisons.org.uk/. I develop on an Ubuntu laptop and a VM that mirrors the LAMP/suPHP configuration that my service provider operates (but I have root access and can see the rewrite logs, etc. on the VM) I statically allocate IP addresses in my 192.168.1.0/24
private address space and have /etc/hosts
symonyms for
127.0.1.1 ... blog.ellisons.org.home forum.ellisons.org.home ...
192.168.1.250 ... blog.ellisons.org.vm ...
But other than this the URI space is identical,so blog.ellisons.org.XX/themes/terry/all.css
loads my css from my server,laptop or VM depending on whether XX=uk,home,vm
However the docroot on my laptop is Debian standard /var/www
, but on the other two it is /websites/LinuxPackage02/el/li/so/ellisons.org.uk/public_html
(my hosters naming convention). Yet my application including .htaccess
files is identical, and the only way that these reflect this multiple use is in regexps where I using as a regexp to match %{HTTP_HOST} (\w+)\.ellisons.\org\.(?:uk|home|vm)
.
So to your example:
- There's nothing to stop you pointing the requests to
/app
to your physical directory /codeigniter-app
on your local PC. You can use an Alias
directive in your server or vhost config to do this..
RewriteBase
takes a URI path argument so /app
would work in both.
- In general Apache understands the difference between URI and FS domains and doesn't get confused -- even your developers regularly do :-) On the rare occasions that you need to refer explicitly to a FS name, say in a
RewriteCond
string, you can use %{DOCUMENT_ROOT}
-- though if your service is a shared service you may have to use an environment variable instead (mine is %{ENV:DOCUMENT_ROOT_REAL}
). I phpinfo() will tell you which.
- Make sure that you use relative addresses in any
RewriteRule
substitutions (no leading slashes).
So to summarise, with a little bit of thought you can make your configurations logically identical as Apache offers -- isn't that better than trying to botch in conditional execution in a way that was never designed into the product?