Norman Khine wrote:
> Boyle Owen wrote:
>   
>>> -----Original Message-----
>>> From: Norman Khine [mailto:[EMAIL PROTECTED] 
>>> Sent: Wednesday, September 06, 2006 9:23 AM
>>> To: users@httpd.apache.org
>>> Subject: [EMAIL PROTECTED] Dynamic RewriteRule based on the URL
>>>
>>> Hello,
>>> Is it possible to create an Apache Rewrite rule so that the 
>>> depending on
>>> the sub-domain the server receives it is then re-written to a 
>>> different
>>> folder, for example, I have this working but want to reduce it to just
>>> one rule:
>>>
>>> <VirtualHost *:80>
>>>     ServerName  folder_A.domain.tld
>>>     RewriteEngine On
>>>     RewriteRule ^/(.*) http://localhost:9080/folder_A/$1 [P]
>>>     RequestHeader set X-Base-Path folder_A
>>>     ErrorLog       /var/log/apache2/folder_A-error_log
>>>     CustomLog      /var/log/apache2/folder_A-access_log common
>>> </VirtualHost>
>>>
>>> <VirtualHost *:80>
>>>     ServerName  folder_B.domain.tld
>>>     RewriteEngine On
>>>     RewriteRule ^/(.*) http://localhost:9080/folder_B/$1 [P]
>>>     RequestHeader set X-Base-Path folder_B
>>>     ErrorLog       /var/log/apache2/folder_B-error_log
>>>     CustomLog      /var/log/apache2/folder_B-access_log common
>>> </VirtualHost>
>>>     
>>>       
>> Take a look at RewriteCond - this allows you to make conditional
>> redirects and so generate an if-else construct, eg:
>>
>> RewriteCond domainA
>> RewriteRule to folder A
>> RewriteCond domainB
>> RewriteRule to folder B
>>
>> Of course, the rewrite directives then go in the main body of the config
>> so they apply to all VHs. BTW, not sure if this is less or more
>> work/effort than your original solution.. So I guess you're really
>> looking for:
>>
>> RewriteRule to folder(domain)
>>
>> where the destination depends on the value of "domain"... I can't think
>> of an easy way to do this - plough through the examples in
>> http://httpd.apache.org/docs/2.2/misc/rewriteguide.html.
>>
>> Rgds,
>> Owen Boyle
>> Disclaimer: Any disclaimer attached to this message may be ignored. 
>>
>>
>>   
>>     
>>> etc...
>>>
>>>
>>> So is there a nice way to reduce this to only one rule where if a
>>> request is sent to folder_A.domain.tld the RewriteRule, 
>>> RequestHandler,
>>> ErrorLog, CustomLog entries are changed accordingly?
>>>
>>> Perhaps something like in the line of %{SERVER_NAME}:
>>>
>>> <VirtualHost *:80>
>>>     ServerName  %{FOLDER_NAME}.domain.tld
>>>     RewriteEngine On
>>>     RewriteRule ^/(.*) http://localhost:9080/%{FOLDER_NAME}/$1 [P]
>>>     RequestHeader set X-Base-Path %{FOLDER_NAME}
>>>     ErrorLog       /var/log/apache2/%{FOLDER_NAME}-error_log
>>>     CustomLog      /var/log/apache2/%{FOLDER_NAME}-access_log common
>>> </VirtualHost>
>>>
>>>
>>> Would this work and how would you set the %{FOLDER_NAME} if 
>>> it does or is there a different approach?
>>>
>>> Many thanks
>>>
>>>
>>> Norman
>>>
>>>
>>> ---------------------------------------------------------------------
>>> The official User-To-User support forum of the Apache HTTP 
>>> Server Project.
>>> See <URL:http://httpd.apache.org/userslist.html> for more info.
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>    "   from the digest: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>     
>>>       
>>  
>>  
>> This message is for the named person's use only. It may contain 
>> confidential, proprietary or legally privileged information. No 
>> confidentiality or privilege is waived or lost by any mistransmission. If 
>> you receive this message in error, please notify the sender urgently and 
>> then immediately delete the message and any copies of it from your system. 
>> Please also immediately destroy any hardcopies of the message. You must not, 
>> directly or indirectly, use, disclose, distribute, print, or copy any part 
>> of this message if you are not the intended recipient. The sender's company 
>> reserves the right to monitor all e-mail communications through their 
>> networks. Any views expressed in this message are those of the individual 
>> sender, except where the message states otherwise and the sender is 
>> authorised to state them to be the views of the sender's company.
>>
>> ---------------------------------------------------------------------
>> The official User-To-User support forum of the Apache HTTP Server Project.
>> See <URL:http://httpd.apache.org/userslist.html> for more info.
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>    "   from the digest: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>   
>>     
> Thanks for your reply, I was looking at the
> http://httpd.apache.org/docs/2.2/misc/rewriteguide.html documentation
> and perhaps something like this may work...
>
> RewriteEngine on
> RewriteCond   %{*HTTP_HOST*}                 *[^.]+*\.host\.com$
> RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
> RewriteRule   *([^.]+)*\.host\.com(.*) http://localhost:9080/*$1*$2 [P]
>
> RequestHeader set X-Base-Path %{*HTTP_HOST*}
>
> #Not sure if the logs entry is correct
>
> ErrorLog       /var/log/apache2/%{*HTTP_HOST*}-error_log
> CustomLog      /var/log/apache2/%{*HTTP_HOST*}-access_log common
>
> Cheers
>
> Norman
>
> ---------------------------------------------------------------------
> The official User-To-User support forum of the Apache HTTP Server Project.
> See <URL:http://httpd.apache.org/userslist.html> for more info.
> To unsubscribe, e-mail: [EMAIL PROTECTED]
>    "   from the digest: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>   
Hello again,
I am still having problems with this and am not sure how to tackle this
from a most effective point of view.

I have setup a wild card DNS entry so that *.mydomain.tld points to an
apache web server.

This works as expected.

On my apache conf file I have a rule that:

<VirtualHost *:80>
    ServerName  folder.domain.tld
    RewriteEngine On
    RewriteRule ^/(.*) http://localhost:9080/folder/$1 [P]
    RequestHeader set X-Base-Path folder
    ErrorLog       /var/log/apache2/folder-error_log
    CustomLog      /var/log/apache2/folder-access_log common
</VirtualHost>


This also works fine without problem.

BUT, I want to have just one rule and use some special apache magic to
change this on the fly ;)

I tried the examples in the
http://httpd.apache.org/docs/2.2/misc/rewriteguide.html and specifically
the example of the Virtual User Host but I cannot get it to work as I am
still getting the apache main page, rather than the page in the directory.

Perhaps my conf file is wrong, here it is:

[1] <VirtualHost *:80>

[2]    ServerName  domain.tld
[3]    RewriteEngine on
[4]    RewriteCond   %{*HTTP_HOST*}    *[^.]+*\.domain\.tld$
[5]    RewriteRule   ^(.+)             %{HTTP_HOST}$1                        [C]
[6]    RewriteRule   *([^.]+)*\.domain\.tld(.*) http://localhost:9080/*$1*$2 [P]

[7]    RequestHeader set X-Base-Path %{*HTTP_HOST*}

[8]    ErrorLog       /var/log/apache2/all-error_log
[9]    CustomLog      /var/log/apache2/all-access_log common

[0] </VirtualHost>


I don't understand line [2], as the server gets the request 
http://folder.domain.tld as this points to an A record IP address Apache will 
return the default page and it stops, how do I inject the %{*HTTP_HOST*} value 
or is there some magic I am missing and don't see?

Assuming that there is, Apache then switches the RewriteEngine on [3] and takes 
everything before domain.tld - what is the meaning of [^.]+ ? then the [C] 
means continue to the next RewriteRule which in my case needs to rewrite to an 
internal server and Proxy this i.e. [P], but this does not work for me either 
;'(

Line [7] I need to set the X-Base-Path to the folder name.

I would like to avoid using vhost.map or any scripting but I am open to 
suggestions if there is no other way ;) 

By the way, I don't have the www.'folder'.domain.tld in my URL - maybe this is 
the problem, but don't see why?

Cheers

Norman


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: [EMAIL PROTECTED]
   "   from the digest: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to