1

Is it possible to use .htaccess file to rewrite this:

http://customer1.com/app/assets/css

into this:

http://customer1.com/app/customers/customer1/assets/css?

If it is then how?

EDIT: The goal is to avoid any updates to .htaccess when a new customer is added EDIT2:

I see that my question has been too vague. I have a CMS that is being used for lots of different customers (www.foo.com, www.bar.com, www.somerandomname.com). Each customer has it's unique files (design, uploads) in a directory /data/www/cms/customers/XXXXXX/ where XXXXXX is the name of the customer. Apache config file has default DocumentRoot set on /data/www/cms/.

What I'm trying to do is to have the URL http://www.foo.com/app/assets/css/bg.png to return a file from the given customers data directory, i.e. /data/www/cms/app/customers/foo.com/assets/css/bg.png.

4
  • 1
    A little more detail - is this a one off to aid a content move, or is it going to be a part of daily use so to speak. Also, just one site or do you want something generic to apply everywhere?
    – Dan
    Oct 20, 2011 at 14:16
  • @Dan A part of daily use. Just one site.
    – Henno
    Oct 20, 2011 at 16:42
  • Will the destination be /data/www/cms/app/customers/foo.com/assets/css/bg.png with foo**.com** or only "foo" without the ".com" (= is this a mistake or not)? This is important for the rewrite rule I may answer. Oct 24, 2011 at 19:52
  • Real life example: /data/www/sisuhaldus/clients/riito_ee/galleries/4/pics/raua1.jpg, where riito_ee is a particular customer.
    – Henno
    Nov 2, 2011 at 18:00

2 Answers 2

2

I don't know about .htaccess file but I'm pretty sure this would work:

RewriteEngine On
RewriteCond %{HTTP_HOST} customer([0-9]+)\.com
RewriteRule ^/app/(.*) /app/customers/customer%1/$1 [QSA]

Explanation:

RewriteCond %{HTTP_HOST} customer([0-9]+)\.com

will put in the variable '%1' the customer number i.e. '1'

RewriteRule ^/app/(.*) /app/customers/customer%1/$1 [QSA]

Means: if the path begins with '/app/' then rewrite it to /app/customers/customer and add the variable '%1' (i.e. '1' in our example) so it should work with what you're asking for: rewrite to http://customer1.com/app/customers/customer1/.

I'm sorry but your question is not really precise, and you should either giver more examples, or be more specific to what you want to do, but I did my best to help you.

You may use the RewriteMap directive as well. Imagine you put all your clients websites and the right directories in it like this:

alsace                     1   
aquitaine                  2   
auvergne                   3   
basse-normandie            4   
bourgogne                  5   
bretagne                   6   
centre                     7   
champagne-ardenne          8   
corse                      9   
franche-comte              10  
haute-normandie            11  

then I use a RewriteRule like this:

RewriteMap mapregions dbm:/web/htdocs/maps/regions.map
RewriteRule ^/region/(.*)/$ /handle_regions.php \
  [NC,E=REGION:${mapregions:$1|notfound}]

So what it does is basically: if you ask for an url like /region/(.*)/ it redirects to /handle_regions.php and sets an environment variable REGION Then I just check if it was found: if not, I stop:

RewriteCond %{ENV:REGION} notfound
# "not found" = 404 :
RewriteRule .* - [R=404,L]

And then here you are. I'm sorry but with all the things I've just said, you have enough material to solve your problem. I don't have the time to do all the stuff for you, sorry man, I did the best I could to help you... and I hope this helps!

5
  • I updated the question and added more information.
    – Henno
    Oct 24, 2011 at 18:27
  • Please update this answer to correspond to my comment under the question?
    – Henno
    Nov 3, 2011 at 13:59
  • I've updated it! No offense, but I don't have the time to do all the stuff for you, sorry man, I did the best I could to help you... and I hope this helps! Nov 3, 2011 at 15:25
  • That's OK. That's more than enough for me. Thank you. I left this previous comment only to be sure you knew that I had answered your comment under the question part, as I wasn't sure you get notifications when it's not your answer and you are not the first commenter (This would be really useful: meta.stackexchange.com/questions/99261/…)
    – Henno
    Nov 4, 2011 at 6:38
  • You welcome ;) ! Nov 4, 2011 at 8:25
-1

That will be something like:

RewriteEngine On
RewriteCond %{http_host} !^customer1\.com\/app\/$
RewriteRule ^/?(.*)$ http://customer1.com/app/customers/customer1/$1
3
  • HTTP_HOST is just the hostname - need to handle the /app match in the RewriteRule (and not unintentionally capture that part of the URL). Oct 20, 2011 at 14:43
  • Can I use %{http_host} in rewriting so that I wouldn't have to create a separate Rewrite rules for each and every customer?
    – Henno
    Oct 20, 2011 at 16:35
  • I'm sorry but your RewriteRule is not correct (it will do a real redirect (301) because when you write http:// in a rewrite rule it does a real 301 whatever the rule is). Oct 21, 2011 at 8:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .