[Apache] Virtual UserHome + mod_rewrite

Pagina: 1
Acties:
  • 30 views sinds 30-01-2008

  • [NUT]
  • Registratie: Juni 2001
  • Laatst online: 18-02 12:34

[NUT]

Heppiedepeppie

Topicstarter
Mijn eerste bezoekje hier, na wat lezen in de stickies ben ik tot de conclusie gekomen dat dit de beste plek is om deze vraag te stellen.

Ik heb tot nu toe altijd mijn userhome verpakt in een viritualhost met de hierna volgende httpd.conf toevoeging. Zo'n zelfde moest ik doen voor ELKE gebruiker die ik door wilde linken met een user.fun-industries.nl url. Alleen kwam ik onlangs op de 8ste entry op deze manier, en toen kwam ik tot de conclusie dat als ik mijn werk op dit domein binnenkort werkelijk ga professionaliseren ik het niet langer zo kon doen... Echter wilde ik voorkomen dat ik voor elke user een DNS CNAME moest plaatsen, dus wilde ik het zoals het al was, door apache zelf laten oplossen, maar dan geautomatiseerd.

code:
1
2
3
4
5
6
7
<VirtualHost *>
ServerAdmin nut@fun-industries.nl
DocumentRoot /home/nut/public_html
ServerName nut.fun-industries.nl
ErrorLog /var/log/apache/nut-error.log
TransferLog /var/log/apache/nut-access.log
</VirtualHost>


Op deze manier linkt Apache nut.fun-industries.nl door naar mijn html folder in /home/nut/ maar uiteraard als je nu www.fun-industries.nl/~nut doet komt deze daar ook op uit. Dit wilde ik standaard zo houden maar geschikt maken voor meerdere gebruikers, zonder steeds zo'n stuk configuratie in de apache config te plakken.

Na lang zoeken en lezen, en proberen, en weer een howto opzoeken, en weer lezen en testen en proberen ben ik tot de hier onder toegevoegde oplossing gekomen: Ik rewrite nu het url nut.fun-industries.nl of www.nut.fun-industries.nl naar www.fun-industries.nl/~nut ... dat werkt ook perfect, maar wat ik had met de directe virtualhost is daarmee helaas verloren gegaan. Ik had een Virtualdomain nut.fun-industries.nl en apache behandelde dat als een 'server' (servername). Maar nu met deze rewrite actie breek ik daarmee, en ga ik naar het (imo) minder mooie en professioneler ogende www.fun-industries.nl/~user met www.fun-industries.nl ook werkelijk als servername en dat is, naar mijn smaak, niet wenselijk.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<VirtualHost *>
RewriteEngine on
RewriteLog /var/log/apache/rewrite-log
RewriteLogLevel 1

RewriteCond %{HTTP_HOST} ^[^.]+\.fun-industries\.nl$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.fun-industries\.nl(.*) http://%{SERVER_NAME}/~$1$2 [L,R]

RewriteCond %{HTTP_HOST} ^www\.[^.]+\.fun-industries\.nl$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.fun-industries\.nl(.*) http://%{SERVER_NAME}/~$1$2 [L,R]

DocumentRoot /home/http/
ServerName www.fun-industries.nl
ServerAlias *.fun-industries.nl
ServerAlias www.*.fun-industries.nl
ErrorLog /var/log/apache/user-error.log
TransferLog /var/log/apache/user-access.log
</VirtualHost>


Dit bovenstaande werkt totaal zoals het hoord. Daar valt niets meer aan te doen. 8)

Even voor de duidelijkheid, ik heb mijn eigen virtualhost weer terug gezet in de config, dus als je op de linkjes klikt zul je merken dat DAT dus wel werkt, maar dat is in feite cheaten :X http://havoc.fun-industries.nl is een van de voorbeelden van een op de rewrite werkende /~user oplossing, http://havoc.fun-industries.nl/blaat/ werkt hierbij ook, en in de onderste regel zie je de naam van de server... :/

Echter zit het probleem dus in de oplossing voor het servername en virtual- host/DNS probleem, Ik heb het alsvolgt proberen op te lossen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<VirtualHost *>
RewriteEngine on
RewriteLog /var/log/apache/user-rewrite-log
RewriteLogLevel 9

RewriteCond %{HTTP_HOST} ^[^.]+\.fun-industries\.nl$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.fun-industries\.nl(.*) /home/$1/public_html$2/~$1$2 [L,R]

RewriteCond %{HTTP_HOST} ^www\.[^.]+\.fun-industries\.nl$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.fun-industries\.nl(.*) /home/$1/public_html$2/~$1$2 [L,R]

ServerName www.fun-industries.nl
ServerAlias *.fun-industries.nl
ServerAlias www.*.fun-industries.nl
ErrorLog /var/log/apache/user-error.log
TransferLog /var/log/apache/user-access.log
DocumentRoot /home/http/
</VirtualHost>


Zoals je ziet probeer ik hier voor de gebruikers redirect een viritueel domein te creeren, door gewoon direct naar de juiste map te sturen. Dit werkt ook, echter is de servername nogsteeds het www.fun-industries.nl adres, en dat probeerde ik dus te verhelpen, door de Aliassen toe te voegen. Echter komen er hier een aantal probleempjes om de hoek zeilen... ten eerste een trailing slash probleem, die krijg ik er maar niet uit. OF het werkt MET slash, OF het werkt ZONDER slash... ik krijg het maar niet aan het werk met beide uitvoeringen.... nogal slordig zo lijkt me... plus dat de error documents en de /icons/ en /cgi-bin/ Aliassen nu niet meer werken :? Zelfs als ik deze bewuste Alias en directory instellingen binnen de <VirtualHost> tags zet werken ze simpelweg _niet_ :|

Wat doe ik fout, en wat kan ik doen om het te verhelpen? En heeft iemand een oplossing voor de ServerName invulling? Ik heb me dood gestaard op de config en de howto's ... ik zie het niet meer 8)7

  • [NUT]
  • Registratie: Juni 2001
  • Laatst online: 18-02 12:34

[NUT]

Heppiedepeppie

Topicstarter
De oplossing... Met dank aan MikeN _/-\o_ in #nos voor de pointers... :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
LoadModule vhost_alias_module /usr/lib/apache/1.3/mod_vhost_alias.so
UseCanonicalName Off

<VirtualHost *>
RewriteEngine on
# Optional
#RewriteLog /var/log/apache/user-rewrite.log
#RewriteLogLevel 1

RewriteMap   lowercase  int:tolower

# Skip on this vhost
RewriteCond  %{HTTP_HOST}  !www\.fun-industries\.nl(.*)

# Make sure it can find the 2 alias directories
RewriteCond  %{REQUEST_URI}  !^/cgi-bin(.*)
RewriteCond  %{REQUEST_URI}  !^/icons(.*)

# What to rewrite on
RewriteCond  ${lowercase:%{HTTP_HOST}}  ^[^.]+\.fun-industries\.nl(.*)$ [OR]
RewriteCond  ${lowercase:%{HTTP_HOST}}  ^www\.[^.]+\.fun-industries\.nl(.*)$

# Do the magic :)
RewriteRule  ^(.+)  ${lowercase:%{HTTP_HOST}}$1  [C]
RewriteRule  ^([^.]+)\.fun-industries\.nl/(.*) /home/$1/public_html/$2 [S=1]
RewriteRule  ^www\.([^.]+)\.fun-industries\.nl/(.*) /home/$1/public_html/$2

# In case the page turns up empty or the server makes a mistake
RewriteRule  missing.html /home/http/missing.html
RewriteRule  booboo.html /home/http/booboo.html
</VirtualHost>


http://nut.fun-industries.nl http://www.nut.fun-industries.nl

[ Voor 4% gewijzigd door [NUT] op 02-01-2004 04:49 ]


Verwijderd

kijk: http://bebbet.kicks-ass.net/
en dan http://aa.bebbet.kicks-ass.net/

gebruik het script wat jij poste...

  • Stewie!
  • Registratie: September 2001
  • Laatst online: 21-02 20:36

Stewie!

Keen must die!

Dude, ga nu geen oude topic kicken. Dit hoort ook niet in PNS thuis :)
Lees even: Algemene gedragsregels (Netiquette)

Marathon loper in Tokyo, London, Rotterdam, Maria Alm, San Francisco, Berlin, Chicago, Amsterdam
Strava: https://www.strava.com/athletes/149347154


  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 21-02 07:44

Koffie

Koffiebierbrouwer

Braaimeneer

En bedankt voor de mededeling ...

Tijd voor een nieuwe sig..


Dit topic is gesloten.