apache - htaccess Map One Directory To Another One Level Up -
apache - htaccess Map One Directory To Another One Level Up -
so here’s i’m trying accomplish. have link:
https://www.mydomain.com/foo/bar/ now, directory "foo" has site in , operational. sake of organization have had create site this:
https://www.mydomain.com/fubar/ so in reality link https://www.mydomain.com/foo/bar/ isn’t directory it. rather happen when people go https://www.mydomain.com/foo/bar/ address doesn’t alter in address bar, rather on backend software brings , uses https://www.mydomain.com/fubar/.
example:
when goes https://www.mydomain.com/foo/bar/sign_up.php still see in address bar, they're getting https://www.mydomain.com/fubar/sign_up.php.
what i've tried far no avail:
htaccess @ https://www.mydomain.com/foo/
options +followsymlinks rewriteengine on rewritebase / rewriterule ^bar/(.*) ../fubar/$1 [nc,l] also
rewritecond %{path_info} ^bar/(.*)$ rewriterule ^.*$ ../fubar/%1 [l] htaccess @ https://www.mydomain.com/
rewriterule ^foo/bar/(.*) /fubar/$1 [l] update: directory https://www.mydomain.com/foo/ root directory https://www.anotherdomain.com/. https://www.anotherdomain.com/bar should bringing https://www.mydomain.com/fubar/
you can’t things have ../ parent directory references rewrite rules:
options +followsymlinks rewriteengine on rewritebase / rewriterule ^bar/(.*) ../fubar/$1 [nc,l] what need set in .htaccess of site’s root on https://www.mydomain.com/:
options +followsymlinks rewriteengine on rewritebase / rewriterule ^foo/bar/?(.*)$ fubar/$1 [qsa,nc,l] the lastly line grabs url has foo/bar in it’s path, /? makes trailing slash optional, , (.*)$ captures values passed parameters.
now, not 100% sure on addition of qsa (query string append) rewrite rule flags, thought query string values passed destination when use. assume need, if don’t utilize instead:
options +followsymlinks rewriteengine on rewritebase / rewriterule ^foo/bar/?(.*)$ fubar/$1 [nc,l] also, there nice way debug rules without reloading browser of time can headache & cause issues when content cached. , temporarilly add together r (rewrite) flag & utilize curl -i view response headers straight while debugging.
for example, on local mamp (mac os x lamp) setup see when run curl -i http://localhost:8888/foo/bar/ r flag set:
curl -i http://localhost:8888/foo/bar/ http/1.1 302 found date: mon, 23 jun 2014 14:11:11 gmt server: apache/2.2.23 (unix) mod_ssl/2.2.23 openssl/0.9.8y dav/2 php/5.4.10 location: http://localhost:8888/fubar/ content-type: text/html; charset=iso-8859-1 as can see location changes location: http://localhost:8888/fubar/ when using r flag. want. when done tweaking rules, remove r flag & should go.
edit: since original poster states desired behavior in update question, rewrite rule never work:
the directory https://www.mydomain.com/foo/ root directory https://www.anotherdomain.com/. https://www.anotherdomain.com/bar should bringing https://www.mydomain.com/fubar/.
for case this, mod_rewrite wrong tool job. utilize mod_proxy instead. first enable in apache this; illustration assumes on ubuntu 12.04 should work on linux apache install
sudo a2enmod proxy proxy_http then set enable reverse proxy on https://www.anotherdomain.com path of /bar/ https://www.mydomain.com/fubar/:
<ifmodule mod_proxy.c> # proxy specific settings proxyrequests off proxypreservehost on <proxy *> adddefaultcharset off order deny,allow allow </proxy> proxypass /bar/ https://www.mydomain.com/fubar/ proxypassreverse /bar/ https://www.mydomain.com/fubar/ </ifmodule> apache .htaccess mod-rewrite reverse-proxy mod-proxy
Comments
Post a Comment