Re: [ALMOST WORKING] Dynamic RewriteRule based on the URL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Well after some time I finally got this working, I say finally because I
have one small problem ;)

Here is my httpd.conf file

<VirtualHost *:80>
  ServerName  dev
  ServerAlias *.dev
  RewriteEngine on
  RewriteCond   %{HTTP_HOST}    ^([a-zA-Z_]+\.dev)$
  RewriteRule   ^(.+)           %{HTTP_HOST}$1          [C]
  RewriteRule   ([a-zA-Z_]+)\.dev(.*) http://localhost:4080/$1$2
[P,E=THEHOST:$1]
  RequestHeader set X-Base-Path %{THEHOST}e
  #Logs
  ErrorLog   /tmp/%{THEHOST}_error.log
  RewriteLog /tmp/%{THEHOST}.log
  RewriteLogLevel 9
</VirtualHost>



So now if I type korea.dev the RewriteRule works correctly and
everything is cool, but is it possible to also somehow dynamically
change the name of the access, error and rewrite log names?

Many thanks for all your help.

Norman

matt farey wrote:
> 
> Norman Khine wrote:
>> Hi
>> Tried this but still get the same error:
>>
>> 127.0.0.1 - - [09/Mar/2007:14:32:40 +0100]
>> [rewrite.example/sid#191ae08][rid#1975450/initial] (4) RewriteCond:
>> input='rewrite.example' pattern='^([a-z]+)\.rewrite\.example$' =>
>> not-matched
>>   
> this means that the host name is rewrite.example rather than
> subdomain.rewrite.example, so there is nothing to match which is why it
> doesnt!
>> here is the updated httpd.conf file
>>
>> <VirtualHost *:80>
>>   ServerName rewrite.example
>>   ServerAdmin khinester
>>   DocumentRoot /Users/khinester/Sites/destinations/
>>   RewriteEngine on
>>   RewriteCond   %{HTTP_HOST} ^([a-z]+)\.rewrite\.example$
>>   RewriteRule   /?(.*) /Users/khinester/Sites/destinations/%1/$1 [QSA,NC]
>>   RewriteLog /tmp/rewrite.log
>>   RewriteLogLevel 9
>>   ErrorLog       /tmp/rewrite_example_log
>> </VirtualHost>
>>
>> I don't understand then 'firstly the vhost stanza...' comment
>>
>>   
> You are sending apache the hostname
> subdomain.rewrite.example
> but your vhost is for rewrite.example
> so the hostname inside the vhost section will always be rewrite.example
> UNLESS you place the vhost section first among all vhost sections and do
> NOT have a default vhost section. somewhere else.
>  Then the way apache works, if it gets a request for
> subdomain.rewrite.example it will look for a vhost section with
> servername subdomain.rewrite.exmple inside and of course you dont have
> one - because you want to support many subdomains
> so apache will serve the FIRST vhost by default when no servername matches.
> 
> It appears at the moment that apache is not doing this - your log shows
> that the hostname coming into the vhost section with servername
> rewrite.example was rewrite.example/
> 
> perhaps I am unclear as to what you are doing, I thought you were trying
> to rewrite things like
> 
> subdomain.rewrite.example/stuff/
> to
> rewrite.example/subdomain/stuff
> 
> matt
>> I also added the DocumentRoot, so that now when I type
>> http://rewrite.example I get the index page on
>> /Users/khinester/Sites/destinations
>>
>> but still when I type http://london.rewrite.example
>>
>> I get a 502 with the above rewrite error log.
>>
>> Also in the error log, I have:
>>
>> [Fri Mar 09 14:42:08 2007] [error] [client 127.0.0.1] (13)Permission
>> denied: apr_global_mutex_lock(rewrite_log_lock) failed
>> [Fri Mar 09 14:42:08 2007] [error] [client 127.0.0.1] (13)Permission
>> denied: apr_global_mutex_unlock(rewrite_log_lock) failed
>> [Fri Mar 09 14:42:08 2007] [error] [client 127.0.0.1] File does not
>> exist: /Users/khinester/Sites/destinations/favicon.ico
>>
>> Any ideas?
>>
>> Cheers
>>
>> Norman
>>
>> matt farey wrote:
>>   
>>> Norman Khine wrote:
>>>     
>>>> Hi all,
>>>> Sometimes back I posted this message, asking if there is a way to get
>>>> http://folder.domain.tld to point to a /home/users/folder - well this is
>>>> just a simplification of the request - but I still have not found a way
>>>> to get this to work... here is a link to the original post.
>>>>
>>>> http://mail-archives.apache.org/mod_mbox/httpd-users/200609.mbox/date
>>>>
>>>> Post title ' Dynamic RewriteRule based on the URL'
>>>>
>>>> Well, now I have a bit of time, I though I tackle this again, so I
>>>> started from basics ;) First tried to get the example to work from
>>>>
>>>> http://httpd.apache.org/docs/2.2/misc/rewriteguide.html - for Virtual
>>>> Users Hosts
>>>>
>>>> here is my httpd.conf
>>>>
>>>> <VirtualHost *:80>
>>>>   ServerName rewrite.example
>>>>   ServerAdmin khinester
>>>>   RewriteEngine on
>>>>   RewriteCond   %{HTTP_HOST}                 ^[^.]+\.rewrite\.example$
>>>>   RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
>>>>   RewriteRule   ^([^.]+)\.rewrite\.example(.*)
>>>> /Users/khinester/Sites/destinations/$1$2
>>>>   RewriteLog /tmp/rewrite.log
>>>>   RewriteLogLevel 9
>>>>   ErrorLog       /tmp/rewrite_example_log
>>>> </VirtualHost>
>>>>
>>>> in my /etc/hosts i have the following two entries:
>>>>
>>>>
>>>> 127.0.0.1 rewrite.example
>>>> 127.0.0.1 london.rewrite.example
>>>>
>>>>
>>>> Now when I go to http://rewrite.example I get my root Apache page, this
>>>> is correct as I have not specified anywhere else to point this at -
>>>> perhaps this may be the problem?
>>>>
>>>> Then when I go to http://london.rewrite.example - I get a 502 Bad
>>>> Gateway error
>>>>
>>>> Here is the rewrite.log output
>>>>
>>>> 127.0.0.1 - - [09/Mar/2007:13:08:56 +0100]
>>>> [rewrite.example/sid#188ae08][rid#1975450/initial] (3) applying pattern
>>>> '^(.+)' to uri '/favicon.ico'
>>>> 127.0.0.1 - - [09/Mar/2007:13:08:56 +0100]
>>>> [rewrite.example/sid#188ae08][rid#1975450/initial] (4) RewriteCond:
>>>> input='rewrite.example' pattern='^[^.]+\.rewrite\.example$' => not-matched
>>>> 127.0.0.1 - - [09/Mar/2007:13:08:56 +0100]
>>>> [rewrite.example/sid#188ae08][rid#1975450/initial] (1) pass through
>>>> /favicon.ico
>>>> 127.0.0.1 - - [09/Mar/2007:13:08:56 +0100]
>>>> [rewrite.example/sid#188ae08][rid#1975450/initial] (2) init rewrite
>>>> engine with requested uri /favicon.ico
>>>> 127.0.0.1 - - [09/Mar/2007:13:08:56 +0100]
>>>> [rewrite.example/sid#188ae08][rid#1975450/initial] (3) applying pattern
>>>> '^(.+)' to uri '/favicon.ico'
>>>> 127.0.0.1 - - [09/Mar/2007:13:08:56 +0100]
>>>> [rewrite.example/sid#188ae08][rid#1975450/initial] (4) RewriteCond:
>>>> input='rewrite.example' pattern='^[^.]+\.rewrite\.example$' => not-matched
>>>> 127.0.0.1 - - [09/Mar/2007:13:08:56 +0100]
>>>> [rewrite.example/sid#188ae08][rid#1975450/initial] (1) pass through
>>>> /favicon.ico
>>>>
>>>> On my machine, /Users/khinester/Sites/destinations has the following
>>>> structure
>>>>
>>>> index.html
>>>> |-- london
>>>> |   |-- images
>>>> |   |-- index.html
>>>> |-- liverpool
>>>> |   |-- images
>>>> |   |-- index.html
>>>>
>>>>
>>>> ....
>>>>
>>>>
>>>> So I was hoping that if I type http://london/rewrite.example to see the
>>>> london/index.html page - which is not the case ;(
>>>>
>>>> I don't see what I am doing wrong here, any pointers much appreciated.
>>>>
>>>> Cheers
>>>>
>>>> Norman
>>>>
>>>>
>>>>
>>>>   
>>>>       
>>> firstly the vhost stanza must be first if it is to catch all the non
>>> existent 3rd level domains
>>> *.rewrite.example
>>>
>>>
>>> but your rule could be
>>>
>>>   RewriteCond   %{HTTP_HOST} ^([a-z]+)\.rewrite\.example$
>>>   RewriteRule   /?(.*) /Users/khinester/Sites/destinations/%1/$1 [QSA,NC]
>>>
>>> "only if there is a 3rd level domain to rewrite.example"
>>> "grab everything after leading slah, rewrite to 
>>> /Users/khinester/Sites/destinations/
>>>
>>> plus whatever the 3rd level domain was  plus /
>>> plus whatever the request uri was without the leading slash
>>>
>>>
>>>
>>>     
>>
>>
>> ---------------------------------------------------------------------
>> 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: users-unsubscribe@xxxxxxxxxxxxxxxx
>>    "   from the digest: users-digest-unsubscribe@xxxxxxxxxxxxxxxx
>> For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx
>>
>>
>>   
> 

-- 
Norman Khine
7 rue Ponscarme, Paris, 75013, France
tel +33 870 628 934 fax +33 142 724 4437
email: norman@xxxxxxxxx

http://www.abakuc.com http://www.uktravellist.info
http://www.destinationsguide.info



---------------------------------------------------------------------
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: users-unsubscribe@xxxxxxxxxxxxxxxx
   "   from the digest: users-digest-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx


[Index of Archives]     [Open SSH Users]     [Linux ACPI]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Squid]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux