Avatar billede 3xm Nybegynder
22. oktober 2004 - 11:38 Der er 11 kommentarer og
1 løsning

regler i .htaccess afhængigt af domæne

det kan godt være at dette lyder som et lidt tænkt spørgmål, men derfor vil jeg gerne have nogle reelle svar på det alligevel...


jeg har 2 domæner der peger samme sted hen, lad os sige domæne1.dk og domæne2.dk

kan man i sin .htaccess-fil sætte regler der kun virker på det ene af domænerne, og andre der kun virker på det andet?

fx:

# for domæne1.dk
RewriteRule ^/?$ /d1.html

# for domæne2.dk
RewriteRule ^/?$ /d2.html


det jeg søger er en måde at afgrænse tingene på så de kun træder i kraft hvis klienten er kommet ind via et bestemt domænenavn.

håber det er til at forstå hvad jeg mener.

=)
Avatar billede Slettet bruger
22. oktober 2004 - 19:02 #1
Ja, er er et eksempel fra http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteCond

To rewrite the Homepage of a site according to the ``User-Agent:'' header of the request, you can use the following:

RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla.*
RewriteRule  ^/$                /homepage.max.html  [L]

RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
RewriteRule  ^/$                /homepage.min.html  [L]

RewriteRule  ^/$                /homepage.std.html  [L]

Og det retter vi bare til at bruge en anden servervariabel:

RewriteCond  %{HTTP_HOST}  ^domæne1.dk$
RewriteRule  ^/$                /d1.html  [L]

RewriteCond  %{HTTP_HOST}  ^domæne2.dk$
RewriteRule  ^/$                /d2.html  [L]

Du kan eventuelt bruge:
RewriteCond  %{HTTP_HOST}  ^(www\.)?domæne1\.dk$
Avatar billede 3xm Nybegynder
23. oktober 2004 - 12:26 #2
sejt! tak for det.

har ikke lige tid at teste det pt. men smid et svar, så er pointene dine.

=)
Avatar billede Slettet bruger
23. oktober 2004 - 12:41 #3
svar
Avatar billede 3xm Nybegynder
25. oktober 2004 - 12:26 #4
må jeg spørge om noget lidt mere?

hvis nu jeg har en hel række af rewrite-regler til det ene domæne, og en hel række til det andet, kan man så 'indkapsle' dem så man ikke behøver skrive RewriteCond foram hver af dem?

=)
Avatar billede Slettet bruger
25. oktober 2004 - 13:28 #5
Ja, men du skal måske fjerne [L] fra reglerne så. Måske vil det egentlig være lettere at overskue, hvis du lader de to regler henvise til hver sin undermappe, og så have en .htaccess i hver af disse mapper i stedet.
Avatar billede 3xm Nybegynder
25. oktober 2004 - 15:08 #6
hvad gør [L]?

problemet er at der reelt ikke er nogen undermapper i mit system. det hele kører på den samme php-fil, men som så gerne skulle kaldes med nogle forskellige variabler afhængigt af domænet.

kan du omformulere nedenstående eksempel til noget korrekt, apache-forståeligt?

---
hvis domæne=d1.dk {
  RewriteRule  ^/$ /index.php?d=d1&side=forside
  RewriteRule  ^billeder/$ /index.php?d=d1&side=billeder
  RewriteRule  ^filer/$ /index.php?d=d1&side=filer
  RewriteRule  ^links/$ /index.php?d=d1&side=links
}

hvis domæne=d2.dk {
  RewriteRule  ^/$ /index.php?d=d2&side=forside
  RewriteRule  ^kunder/$ /index.php?d=d2&side=kunder
  RewriteRule  ^produkter/$ /index.php?d=d2&side=produkter
  RewriteRule  ^links/$ /index.php?d=d2&side=links
}
Avatar billede 3xm Nybegynder
25. oktober 2004 - 15:09 #7
...og jeg giver gerne flere point hvis det er.

=)
Avatar billede Slettet bruger
25. oktober 2004 - 16:33 #8
L betyder Last - altså at der ikke skal behandles flere regler.

Bemærk forresten, at $ i søgestrengen betyder "slut på streng", så det er ikke sikkert, at reglerne gør det, du tror.

Jeg har sammensat dette hack:

RewriteCond  %{HTTP_HOST}  ^domæne1.dk$
RewriteRule  ^/(.*)$                /domæne1/$1

RewriteCond  %{HTTP_HOST}  ^domæne2.dk$
RewriteRule  ^/(.*)$                /domæne2/$1

RewriteRule  ^/domæne1/$ /index.php?d=d1&side=forside
RewriteRule  ^/domæne1/billeder/$ /index.php?d=d1&side=billeder
RewriteRule  ^/domæne1/filer/$ /index.php?d=d1&side=filer
RewriteRule  ^/domæne1/links/$ /index.php?d=d1&side=links

RewriteRule  ^/domæne2/$ /index.php?d=d2&side=forside
RewriteRule  ^/domæne2/kunder/$ /index.php?d=d2&side=kunder
RewriteRule  ^/domæne2/produkter/$ /index.php?d=d2&side=produkter
RewriteRule  ^/domæne2/links/$ /index.php?d=d2&side=links

RewriteRule  ^/(domæne1|domæne2)/(.*)$    /$2

Forklaring: Først sættes domænenavnet (eller en anden unik streng) ind i URLen. Derefter matcher vi på den, for at se, hvilke af de forskellige erstatninger, der skal foregå. Og til allersidst fjernes det igen, hvis der ikke var nogen af de foregående regler, der gjorde det.
Avatar billede 3xm Nybegynder
25. oktober 2004 - 21:43 #9
> Bemærk forresten, at (...)

den del af det har jeg nogenlunde styr på.

er det ikke muligt at lave en form for container til en række rules?

i stil med:

RewriteCond  %{HTTP_HOST}  ^domæne1.dk$ {
  RewriteRule  ^/$ /index.php?d=d1&side=forside
  RewriteRule  ^billeder/$ /index.php?d=d1&side=billeder
  RewriteRule  ^filer/$ /index.php?d=d1&side=filer
  RewriteRule  ^links/$ /index.php?d=d1&side=links
}

jeg ved godt at { og } nok ikke er rette syntaks i en apache-konfiguration, men der må da findes noget lign.?
Avatar billede Slettet bruger
25. oktober 2004 - 22:10 #10
Jo, det fandt jeg lige:

RewriteCond  %{HTTP_HOST}  ^domæne1.dk$
RewriteRule  /  -  [S=4]

  RewriteRule  ^/$ /index.php?d=d1&side=forside
  RewriteRule  ^billeder/$ /index.php?d=d1&side=billeder
  RewriteRule  ^filer/$ /index.php?d=d1&side=filer
  RewriteRule  ^links/$ /index.php?d=d1&side=links


Tallet efter S skal være antallet af regler, der skal Skippes, hvis den pågælde regel matcher. / er bare en match, som altid vil være sand, og - betyder, at den ikke skal erstatte noget.
Avatar billede 3xm Nybegynder
27. oktober 2004 - 13:35 #11
hehe... nu har jeg testet dit eksempel. det har ikke helt den tilsigtede virkning.

min .htaccess ser sådan her ud:

---
RewriteEngine On


RewriteCond  %{HTTP_HOST}  ^d1.dk$
  RewriteRule  /  -  [S=2]
  RewriteRule  ^laks/?$ /laks.jpg
  RewriteRule  ^tun/?$ /tun.jpg
 
RewriteCond  %{HTTP_HOST}  ^d2.dk$
  RewriteRule  /  -  [S=2]
  RewriteRule  ^ole/?$ /ole.html
  RewriteRule  ^per/?$ /per.html
---

hvis man så prøver at få fat på d1.dk/tun/ - så får man 404. Går man til gengæld ind på d2.dk/tun/ - så får man fat i tun.jpg - de virker altså på hinanden (og så vidt jeg kan forstå ville d3.dk også kunne få fat i /tun/ hvis der fandtes en 3d.dk).

findes der virkelig ikke en nem måde at gruppere rewrite-regler på efter domæne? jeg ville egentligt også gerne undgå at skulle ændre S-værdien hvergang jeg laver en ny regel eller fjerner en gammel. er det lykkedes mig at finde et område apache's fleksibilitet dog ikke dækker?

jeg opretter et nyt spørgsmål hvor det hele er uddybet lidt bedre. så kan du svare der hvis du vil (og få flere point hvis vi finder en løsning), og så kan andre også se at spørgsmålet stadigt er aktivt.

=)
Avatar billede 3xm Nybegynder
27. oktober 2004 - 13:42 #12
det nye spørgsmål: http://www.eksperten.dk/spm/555055

og mange tak for hjælpen, sandbox. håber du vil hjælpe i det nye også.

=)
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