Avatar billede dennism Nybegynder
01. april 2008 - 21:42 Der er 40 kommentarer og
2 løsninger

Apache: subdomæner

Jeg har brug for, at når man besøger enkunde.mitdomæne.dk, så skal man se siden:
mitdomæne.dk/customer/?customer=enkunde

For at løse dette, har jeg lavet dette virtualhost på min apache server:
<VirtualHost *>
        DocumentRoot /www/subdomain
        ServerName *.mitdomæne.dk
</VirtualHost>

Dvs. at alle der forsøger at få adgang med et subdomæne vil blive sendt til mappen /www/subdomain/. Her har jeg en PHP-fil som tjekker SERVER_NAME (eg. enkunde.mitdomæne.dk). Dette parser jeg op, så jeg står tilbage med "enkunde".
Dermed ved jeg, hvilken kunde der ønsker adgang (ligger i $subdomain). Jeg lavede derfor:
header("Location: ../customer/?customer=".$subdomain);

Som så sender videre til eg.: ../customer/?customer=enkunde

Dermed får jeg det jeg ønsker - men der er bare et problem:

I adresselinien bliver adressen skiftet fra "enkunde.mitdomæne.dk" til "mitdomæne.dk/customer/?customer=enkunde". Er det ikke muligt at lave på en måde, således at adresselinien ikke skifter adresse? Det er meget vigtigt :)

På forhånd tak for svaret.
Avatar billede leif Seniormester
01. april 2008 - 21:53 #1
Avatar billede leif Seniormester
01. april 2008 - 21:54 #2
Gad vide om man ikke kunne bruge noget af det til et eller andet eller tager jeg fejl
Avatar billede dennism Nybegynder
01. april 2008 - 21:59 #3
Jeg overvejede også i starten rewrite rules, men kan ikke se, hvordan jeg skal koble det samme men subdomænerne - altå når jeg trykker ind på enkunde.mitdomæne.dk?

Det kan jeg ikke helt gennemskue.
Avatar billede showsource Seniormester
02. april 2008 - 16:17 #4
Avatar billede dennism Nybegynder
02. april 2008 - 16:43 #5
Hvad er det på overstående link, som kan bruges til mit problem?
Avatar billede dennism Nybegynder
02. april 2008 - 19:42 #6
Er eneste løsning at lave et frameset, i stedet for at sende videre med en header?
Avatar billede leif Seniormester
02. april 2008 - 20:41 #7
Nej, der findes massere at eksempler på nettet med folk som har brugt rewrite og subdomæner
Avatar billede dennism Nybegynder
02. april 2008 - 21:59 #9
Tak leif, det var lige hvad jeg skulle bruge. Smider du lige et svar?

Der er lige et problem. Der er linien:
RewriteCond %{REQUEST_URI} !^/userdir/ [NC]

Skal jeg lave sådan en linie for hver mappe som er i roden på stien?
Avatar billede leif Seniormester
02. april 2008 - 22:06 #10
Ifølge dit spørgsmål skal det vil blot være:
/customer/
Avatar billede dennism Nybegynder
02. april 2008 - 22:16 #11
Men hvad gør denne linie?
Avatar billede leif Seniormester
02. april 2008 - 22:23 #12
Pas
Avatar billede showsource Seniormester
03. april 2008 - 08:00 #13
Ja, mig som ikke fik læst spm. ordentligt.....

http://httpd.apache.org/docs/2.2/rewrite/rewrite_flags.html
Avatar billede dennism Nybegynder
03. april 2008 - 14:36 #14
showsource >>

Henviser du til samme løsning som leif?
Avatar billede leif Seniormester
03. april 2008 - 14:41 #15
Vel i en eller form gør han, de bruger begge rewrite rules til at håndtere det med.
Avatar billede dennism Nybegynder
03. april 2008 - 14:49 #16
Nogle fordele ved at bruge den løsning så?
Avatar billede dennism Nybegynder
03. april 2008 - 14:50 #17
Måske showsource ved, hvad denne linie gør:
RewriteCond %{REQUEST_URI} !^/userdir/ [NC]
Avatar billede showsource Seniormester
06. april 2008 - 12:23 #18
Den siger vel:
Hvis REQUEST_URI IKKE ( ! ) ER /userdir/
^ betyder "start herfra"

På ovenstående link til "flags" kan jeg forstå at
NC (nocase) betyder "uanset om det er store eller små bogstaver"
Avatar billede dennism Nybegynder
06. april 2008 - 13:18 #19
Tak for svaret!

Jeg har fået et lille problem, som jeg håber I kan hjælpe mig med!

Lad og sige, at jeg har denne mappe:
mitdomæne.dk/customer/undermappe

Med den opsætning jeg har, så peget "firma.mitdomæne.dk" på "mitdomæne.dk/customer/?customer=firma".

Problemet er så, at hvis jeg besøger "firma.mitdomæne.dk/undermappe" så vil jeg gerne se "mitdomæne.dk/customer/undermappe", men ser stadig "mitdomæne.dk/customer/?customer=firma".

Håber der er én der kan hjælpe mig med det?

Her er mine rewrite:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^w{3}\. [NC]
    RewriteCond %{REQUEST_URI} !^/customer/ [NC]
    RewriteCond %{HTTP_HOST} ^([^.]+)\.mitdomæne\.dk$ [NC]
    RewriteRule ^.*$ /customer/index.php?customer=%1 [L]
Avatar billede dennism Nybegynder
06. april 2008 - 21:38 #20
Er der ingen der kan hjælpe med dette?

Jeg har forsøgt mig med en anden løsning. Her et mine rewrite for mine subdomæner:
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^w{3}\. [NC]
    RewriteCond %{REQUEST_URI} !^/administrator/ [NC]
    RewriteCond %{REQUEST_URI} !^/cache/ [NC]
    RewriteCond %{REQUEST_URI} !^/components/ [NC]
    RewriteCond %{REQUEST_URI} !^/editor/ [NC]
    RewriteCond %{REQUEST_URI} !^/help/ [NC]
    RewriteCond %{REQUEST_URI} !^/images/ [NC]
    RewriteCond %{REQUEST_URI} !^/includes/ [NC]
    RewriteCond %{REQUEST_URI} !^/language/ [NC]
    RewriteCond %{REQUEST_URI} !^/mambots/ [NC]
    RewriteCond %{REQUEST_URI} !^/media/ [NC]
    RewriteCond %{REQUEST_URI} !^/modules/ [NC]
    RewriteCond %{REQUEST_URI} !^/templates/ [NC]
    RewriteCond %{HTTP_HOST} ^([^.]+)\.dennismadsen\.com$ [NC]
    RewriteRule ^.*$ /index.php?customer=%1 [L]

Alle de mapper der er indsat, er dem som ligger i mitdomæne.dk/customer/. Med denne løsning, så kan jeg ved f.eks. "http://dong.mitdomæne.dk/images/banners/osmbanner1.png" se filen mitdomæne.dk/customer/images/banners/osmbanner1.png. Så det er fint, selv om det er en lidt træls måde at skulle løse det på - altså ved at skulle lave en rewriteCond for hver mappe i roden af customer.

Men når jeg gør sådan, får jeg et andet problem:
Et link som dette vil ikke virker:
http://dong.mitdomæne.dk/testside.php
Det virker selvfølgelig ikke, da rewrite ser at der er et subdomæne og sender videre med dette. Den glemmer altså alt om den path jeg gerne vil se :(

Håber der er nogen, som kan hjælpe mig med en løsning! Det fungerer desværre ikke helt som det skal :(
Avatar billede dennism Nybegynder
06. april 2008 - 21:38 #21
I overstående er dong firmanavnet!
Avatar billede showsource Seniormester
07. april 2008 - 00:06 #22
ehh, jeg bruger flg. i .htaccess i et underdir til domainet: ( f.eks. domain.dk/customer/ )

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z]+)(/)?$ index.php?show=$1

Hvis jeg går i et dir som findes ( eller requester en fil ) bliver den vist, ( mappe/fil )

Selve dir'et .htaccess ligger i, bruges til at styre brugerlogin m.m.
Avatar billede showsource Seniormester
07. april 2008 - 00:11 #23
Og man skal altså virkelig være nørd for at kunne styre regular expressions! :O)
I dir'et "images" ( underdir til "customer" ) ligger en .htaccess med

Options FollowSymlinks

så man kan requeste en fil direkte men ikke mulighed for at se hvilke filer som egentlig ligger i dir'et.
Avatar billede dennism Nybegynder
07. april 2008 - 10:34 #24
Jeg vil tro, at jeg har fået lavet en løsning nu.

Hvis nogle skulle have interesse, så kommer mit virtuelle host her:

<VirtualHost *>
    DocumentRoot /var/www/customer
        ServerName mitdomæne.dk
    ServerAlias *.mitdomæne.dk
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{HTTP_HOST} !^w{3}\. [NC]
    RewriteCond %{HTTP_HOST} ^([^.]+)\.mitdomæne\.dk$ [NC]
    RewriteRule ^([A-Za-z]+)(/)?$ index.php?customer=$1
</VirtualHost>

Så har jeg så et andet virtualhost der tager imod www.mitdomæne.dk
Avatar billede leif Seniormester
07. april 2008 - 10:52 #25
Jeg havde nok så valgt:
  ServerName customer.mitdomæne.dk
  ServerAlias *.mitdomæne.dk


Og på mit www.mitdomæne.dk
  ServerName mitdomæne.dk
  ServerAlias www.mitdomæne.dk
Avatar billede dennism Nybegynder
07. april 2008 - 11:11 #26
Jeg ved ikke hvad der er gået galt nu, men af en eller anden grund, så virker mine virtualhost ikke længere. Jeg har sat den op på dennismadsen.com, så I måske kan hjælpe:

<VirtualHost *>
    DocumentRoot /media/data/www/
        ServerName dennismadsen.com
    ServerAlias www.dennismadsen.com
</VirtualHost>

<VirtualHost *>
    DocumentRoot /media/data/www/customer
        ServerName customer.dennismadsen.com
    ServerAlias *.dennismadsen.com
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{HTTP_HOST} ^([^.]+)\.dennismadsen\.com$ [NC]
    RewriteRule ^([A-Za-z]+)(/)?$ index.php?customer=$1
</VirtualHost>

Man kan sagtens læse fra "http://www.dennismadsen.com", men vælger man f.eks "http://firma.dennismadsen.com", så går der kage i den. Nogen der kan se hvad der er galt?
Avatar billede leif Seniormester
07. april 2008 - 11:56 #27
http://www.dennismadsen.com men leder efter data op 127.0.0.1, så siden ser ikke så pæn ud.
Avatar billede leif Seniormester
07. april 2008 - 11:58 #28
Er det med vilje at du har fjernet:
  RewriteCond %{HTTP_HOST} !^w{3}\. [NC]

i forhold til din kommentar kl. 10:34:45
Avatar billede dennism Nybegynder
07. april 2008 - 12:15 #29
Både ja og nej. Jeg fjernede den, fordi jeg troede den styrede hvis man kaldte www. Men det har jeg et helt virtualhost til at klare. Så derfor slettede jeg den.

www.dennismadsen.com skulle gerne se "pæn" ud nu.

Spørgsmålet er bare, hvorfor subdomænerne ikke virker?
Avatar billede dennism Nybegynder
07. april 2008 - 12:27 #30
I forsøg på at debugge har jeg nu kun dette i min /sites-enabled/000-default:

NameVirtualHost *

<VirtualHost *>
    DocumentRoot /media/data/www
        ServerName dennismadsen.com
    ServerAlias www.dennismadsen.com
</VirtualHost>

<VirtualHost *>
    DocumentRoot /media/data/wwwcustomer
        ServerName dennismadsen.com
    ServerAlias *.dennismadsen.com
</VirtualHost>

Som I kan se, så virker det første VirtualHost fint, mens det andet fejler.

Nogen der kan se fejlen her?
Avatar billede leif Seniormester
07. april 2008 - 13:00 #31
Du har ikke en .htaccess liggende i wwwcustomer
Avatar billede leif Seniormester
07. april 2008 - 13:00 #32
En dårlig idé med 2 som har samme ServerName

Så kald nr. customer eller et eller andet.
Avatar billede dennism Nybegynder
07. april 2008 - 13:26 #33
Jeg fandt løsningen på det problem. Jeg var kommet til at lave en "header('Location: ../');" på customer-siden. Det dur selvfølgelig ikke, når man er i roden!

Alt virker fint nu, bortset fra at subdomænet ikke får sendt videre til "index.php?customer=subdomæne". Se f.eks. her:
http://firma.dennismadsen.com/

Som I kan se i teksten i toppen er der ikke nogen værdi i $_GET['customer']. Det må være den nederste rewriterule der ikke fungerer som den skal?

Min virtual host er nu:
<VirtualHost *>
    DocumentRoot /media/data/www/customer
        ServerName customer.dennismadsen.com
    ServerAlias *.dennismadsen.com
    RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{HTTP_HOST} ^([^.]+)\.dennismadsen\.com$ [NC]
        RewriteRule ^([A-Za-z]+)(/)?$ index.php?customer=$1
</VirtualHost>
Avatar billede dennism Nybegynder
07. april 2008 - 21:35 #34
Avatar billede dennism Nybegynder
09. april 2008 - 18:01 #35
Smider du lige et svar leif?
Avatar billede leif Seniormester
09. april 2008 - 18:43 #36
Ja, hvis du mener jeg har hjulpet
Avatar billede leif Seniormester
09. april 2008 - 18:44 #37
Jeg lærer det nok en dag :)
Avatar billede dennism Nybegynder
09. april 2008 - 19:29 #38
Beklager, glemte også lige showsource! Gider du smide et svar også?
Avatar billede showsource Seniormester
09. april 2008 - 19:34 #39
njahh, det var jo via linket som leif lagde du fandt din løsning :O)
Avatar billede dennism Nybegynder
09. april 2008 - 20:09 #40
Din hjælp var også til gavn! Smid et svar - det er en ordre ;)
Avatar billede showsource Seniormester
09. april 2008 - 20:21 #41
ok så da.
Avatar billede dennism Nybegynder
09. april 2008 - 21:01 #42
Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester