Bekijk Volledige Versie : .htaccess rewrite
Carl Janssen
20/06/04, 14:15
Hallo,
Even kort schetsen wat ik wil bereiken.
Ik heb een domein, domein.be, en een daarop een subdomain,
subdomein.domein.be.
Nu wil ik dat domein.be een soort van spiegel wordt voor
subdomein.domein.be. Stel dat er op subdomein.domein.be een directory
'test' is, dan moet die ook bereikbaar worden via domein.be/test/.
Ik heb al begrepen dat ik met de rewrite functie van .htacces kan/moet
werken. Dit heb ik er ondertussen van gebakken:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.domein.be$ [OR]
RewriteCond %{HTTP_HOST} ^domein.be$
RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [R=301,L]
Werkt perfect, maar ik wil nog een stapje verder gaan. Nu is domein.be dus
een 'spiegel' voor subdomein.domein.be. Er zijn echter enkele directories
op domein.be die *niet* naar subdomein.domein.be mogen doorverwijzen, zoals
de cgi-bin. domein.be/cgi-bin/ moet dus gewoon zo blijven en niet gezocht
gaan worden op subdomein.domein.be.
Hoe maak ik met andere woorden 'uitzonderingen' op die rewrite regel van
hierboven? Iemand tips?
Ronald Klip
20/06/04, 15:05
Carl Janssen schreef:
> Hallo,
Hoi,
> Nu wil ik dat domein.be een soort van spiegel wordt voor
> subdomein.domein.be. Stel dat er op subdomein.domein.be een directory
> 'test' is, dan moet die ook bereikbaar worden via domein.be/test/.
>
> RewriteEngine on
> RewriteCond %{HTTP_HOST} ^www.domein.be$ [OR]
> RewriteCond %{HTTP_HOST} ^domein.be$
> RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [R=301,L]
>
> Werkt perfect, maar ik wil nog een stapje verder gaan. Nu is domein.be dus
> een 'spiegel' voor subdomein.domein.be. Er zijn echter enkele directories
> op domein.be die *niet* naar subdomein.domein.be mogen doorverwijzen, zoals
> de cgi-bin. domein.be/cgi-bin/ moet dus gewoon zo blijven en niet gezocht
> gaan worden op subdomein.domein.be.
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/cgi-bin
RewriteCond %{HTTP_HOST} ^www.domein.be$ [OR]
RewriteCond %{HTTP_HOST} ^domein.be$
RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [R=301,L]
Het uitroepteken betekent 'niet'. REQUEST_URI bevat het uri-stukje uit
de request, bijv. /cgi-bin/bla.pl in "GET /cgi-bin/bla.pl HTTP/1.1". De
toegevoegde RewriteCond kijkt dus alleen naar requests die niet met
/cgi-bin beginnen.
[niet getest...]
--
groet, Ronald
Carl Janssen
20/06/04, 15:25
"Ronald Klip" <nieuws@bladibla.net.invalid> schreef in bericht
news:MPG.1b3fa679d28a7e479897eb@news.xs4all.nl...
>
> RewriteEngine on
> RewriteCond %{REQUEST_URI} !^/cgi-bin
> RewriteCond %{HTTP_HOST} ^www.domein.be$ [OR]
> RewriteCond %{HTTP_HOST} ^domein.be$
> RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [R=301,L]
>
> Het uitroepteken betekent 'niet'. REQUEST_URI bevat het uri-stukje uit
> de request, bijv. /cgi-bin/bla.pl in "GET /cgi-bin/bla.pl HTTP/1.1". De
> toegevoegde RewriteCond kijkt dus alleen naar requests die niet met
> /cgi-bin beginnen.
>
> [niet getest...]
Ik wel. En het werkt! Bedankt. ;-)
Nog twee kleine vraagjes:
1/ Als ik nu meerdere directories wil uitsluiten, wordt dat dan gewoon
RewriteCond %{REQUEST_URI} !^/directory1 !^/directory2?
2/ Kan ik er ook voor zorgen dat in de adresbalk van je browser de
oorspronkelijke URL blijft staan (domein.be/directory/) en niet dat waar
naar doorverwezen wordt (subdomein.domein.be/directory/)?
Ronald Klip
20/06/04, 15:45
Carl Janssen schreef:
> "Ronald Klip" <nieuws@bladibla.net.invalid> schreef in bericht
> news:MPG.1b3fa679d28a7e479897eb@news.xs4all.nl...
> >
> > RewriteEngine on
> > RewriteCond %{REQUEST_URI} !^/cgi-bin
> > RewriteCond %{HTTP_HOST} ^www.domein.be$ [OR]
> > RewriteCond %{HTTP_HOST} ^domein.be$
> > RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [R=301,L]
> >
> > Het uitroepteken betekent 'niet'. REQUEST_URI bevat het uri-stukje uit
> > de request, bijv. /cgi-bin/bla.pl in "GET /cgi-bin/bla.pl HTTP/1.1". De
> > toegevoegde RewriteCond kijkt dus alleen naar requests die niet met
> > /cgi-bin beginnen.
> >
> > [niet getest...]
>
> Ik wel. En het werkt! Bedankt. ;-)
>
> Nog twee kleine vraagjes:
>
> 1/ Als ik nu meerdere directories wil uitsluiten, wordt dat dan gewoon
> RewriteCond %{REQUEST_URI} !^/directory1 !^/directory2?
Neen. Wat in elk geval zou moeten werken is
RewriteCond %{REQUEST_URI} !^/directory1
RewriteCond %{REQUEST_URI} !^/directory2
RewriteCond %{REQUEST_URI} !^/directory3
et cetera, hetgeen wellicht korter te schrijven is als
RewriteCond %{REQUEST_URI} !^(/directory1)|(/directory2)|(/directory3)
De | staat voor 'of'. Als er trouwens een patroon zit in die
directorynamen, kan het indien gewenst nog korter gemaakt worden.
> 2/ Kan ik er ook voor zorgen dat in de adresbalk van je browser de
> oorspronkelijke URL blijft staan (domein.be/directory/) en niet dat waar
> naar doorverwezen wordt (subdomein.domein.be/directory/)?
Verwijder dan dat R=301 uit de RewriteRule:
RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [L]
De R=301 stuurt een redirect-berichtje naar de browser, met statuscode
301, waarop de meeste browsers de meegestuurde URL zullen opvragen. Die
URL komt dan uiteraard in de adresbalk te staan. Zonder redirect niet.
Wellicht had je de documentatie al gevonden; zoniet:
http://httpd.apache.org/docs/mod/mod_rewrite.html en
http://www.engelschall.com/pw/apache/rewriteguide/
--
groet, Ronald
Carl Janssen
20/06/04, 16:05
"Ronald Klip" <nieuws@bladibla.net.invalid> schreef in bericht
news:MPG.1b3fb1d1b59a12cf9897ec@news.xs4all.nl...
>
> Neen. Wat in elk geval zou moeten werken is
>
> RewriteCond %{REQUEST_URI} !^/directory1
> RewriteCond %{REQUEST_URI} !^/directory2
> RewriteCond %{REQUEST_URI} !^/directory3
>
> et cetera, hetgeen wellicht korter te schrijven is als
>
> RewriteCond %{REQUEST_URI} !^(/directory1)|(/directory2)|(/directory3)
>
> De | staat voor 'of'. Als er trouwens een patroon zit in die
> directorynamen, kan het indien gewenst nog korter gemaakt worden.
Aha, bedankt!
>
> > 2/ Kan ik er ook voor zorgen dat in de adresbalk van je browser de
> > oorspronkelijke URL blijft staan (domein.be/directory/) en niet dat waar
> > naar doorverwezen wordt (subdomein.domein.be/directory/)?
>
> Verwijder dan dat R=301 uit de RewriteRule:
> RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [L]
>
> De R=301 stuurt een redirect-berichtje naar de browser, met statuscode
> 301, waarop de meeste browsers de meegestuurde URL zullen opvragen. Die
> URL komt dan uiteraard in de adresbalk te staan. Zonder redirect niet.
OK, dan doe ik het op die manier.
> Wellicht had je de documentatie al gevonden; zoniet:
> http://httpd.apache.org/docs/mod/mod_rewrite.html en
Deze wel, maar uiteindelijk zag ik door de bomen het bos niet meer.
> http://www.engelschall.com/pw/apache/rewriteguide/
Deze nog niet. Ik neem 'm eens rustig door.
Bedankt voor de hulp en de tips! ;-)
Carl Janssen
20/06/04, 16:15
"Ronald Klip" <nieuws@bladibla.net.invalid> schreef in bericht
news:MPG.1b3fb1d1b59a12cf9897ec@news.xs4all.nl...
> Carl Janssen schreef:
>
> > 2/ Kan ik er ook voor zorgen dat in de adresbalk van je browser de
> > oorspronkelijke URL blijft staan (domein.be/directory/) en niet dat waar
> > naar doorverwezen wordt (subdomein.domein.be/directory/)?
>
> Verwijder dan dat R=301 uit de RewriteRule:
> RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [L]
>
> De R=301 stuurt een redirect-berichtje naar de browser, met statuscode
> 301, waarop de meeste browsers de meegestuurde URL zullen opvragen. Die
> URL komt dan uiteraard in de adresbalk te staan. Zonder redirect niet.
Dit lijkt wel niet te werken. In de adresbalk komt nog steeds het nieuwe
adres te staan. Op
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule lees ik:
If no code is given a HTTP response of 302 (MOVED TEMPORARILY) is used.
Misschien heeft dat er wat mee te maken?
Ronald Klip
20/06/04, 17:05
Carl Janssen schreef:
>
> "Ronald Klip" <nieuws@bladibla.net.invalid> schreef in bericht
> news:MPG.1b3fb1d1b59a12cf9897ec@news.xs4all.nl...
> > Carl Janssen schreef:
> >
> > > 2/ Kan ik er ook voor zorgen dat in de adresbalk van je browser de
> > > oorspronkelijke URL blijft staan (domein.be/directory/) en niet dat waar
> > > naar doorverwezen wordt (subdomein.domein.be/directory/)?
> >
> > Verwijder dan dat R=301 uit de RewriteRule:
> > RewriteRule ^(.*)$ http://subdomein.domein.be/$1 [L]
> >
> Dit lijkt wel niet te werken. In de adresbalk komt nog steeds het nieuwe
> adres te staan.
Hmm, ja, ik zat te slapen. Dat subdomein moet overigens wel op dezelfde
server staan, anders kan je alleen maar redirecten.
Misschien kun je eea dan rewriten door naar het absolute pad te
verwijzen (maar nu ga ik gokken):
RewriteRule ^(.*)$ /pad/naar/webroot/van/subdomein/$1 [L]
> Op
> http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule lees ik:
>
> If no code is given a HTTP response of 302 (MOVED TEMPORARILY) is used.
>
> Misschien heeft dat er wat mee te maken?
Ze doelen dan op de vervanging van R=301 door alleen de vlag R.
--
groet, Ronald
Carl Janssen
20/06/04, 17:25
"Ronald Klip" <nieuws@bladibla.net.invalid> schreef in bericht
news:MPG.1b3fc2c3fe8f5d049897ed@news.xs4all.nl...
>
> RewriteRule ^(.*)$ /pad/naar/webroot/van/subdomein/$1 [L]
Dit levert helaas een 500 server error op.
Maar goed, ik ben al meer dan tevreden dat het 'hoofdprobleem' is opgelost.
Dank voor je hulp.