Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Apache2 rewrite rule  (gelezen 870 keer)

Offline poj

  • Lid
  • Steunpunt: Nee
Apache2 rewrite rule
« Gepost op: 2011/11/02, 12:48:46 »
Beste Mensen,

Op mijn webserver wil ik de volgende virtual host aanmaken voor een subdomein:
Citaat
<VirtualHost *:80>
DocumentRoot "/home/www/www3/subtest"
ServerName subtest.domain.com
</VirtualHost>

Omdat er documenten (stylesheets bv.) in de dir www3 staan wil ik dat de root anders komt te liggen.

Aan de hand van de beschrijving die ik het gevonden op de site van Apache: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html:
Citaat
Moved DocumentRoot

Description:

    Usually the DocumentRoot of the webserver directly relates to the URL "/". But often this data is not really of top-level priority, it is perhaps just one entity of a lot of data pools. For instance at our Intranet sites there are /e/www/ (the homepage for WWW), /e/sww/ (the homepage for the Intranet) etc. Now because the data of the DocumentRoot stays at /e/www/ we had to make sure that all inlined images and other stuff inside this data pool work for subsequent requests.
Solution:

    We redirect the URL / to /e/www/:

    RewriteEngine on
    RewriteRule   ^/$  /e/www/  [R]

    Note that this can also be handled using the RedirectMatch directive:

    RedirectMatch ^/$ http://example.com/e/www/

Heb ik mijn virtual host als volgt aangepast:
Citaat
<VirtualHost *:80>
DocumentRoot "/home/www/www3/subtest"
ServerName subtest.domein.com
RewriteEngine  on
RewriteRule   ^/$  /www3/  [R]
</VirtualHost>

Echter ik krijg nu de volgende foutmelding als ik apache wil herstarten:
Citaat
1.   Fout bij het starten van apache :
 * Starting web server apache2
Syntax error on line 32 of /etc/apache2/sites-enabled/000-default:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
   ...fail!

Maak ik ergens een syntaxfout, of gebruik ik een verkeerde methode, of kan gewoon niet wat ik wil bereiken?

Alvast bedankt,

Jop

Online Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #1 Gepost op: 2011/11/02, 13:39:45 »
De rewrite module staat nog niet aan, dit kan je oplossen via 1 commando:
sudo a2enmod rewrite

Offline poj

  • Lid
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #2 Gepost op: 2011/11/02, 13:48:00 »
Ga ik proberen. Blijft rewrite ook aan staan na een herstart van de server of moet ik dat ergens vast zetten?

Doet dit dan ook wat ik beoog te bereiken? of ben ik met heel wat anders bezig?

Online Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #3 Gepost op: 2011/11/02, 13:48:58 »
Dat blijft aan staan, uitschakelen kan met a2dismod modulenaam :)

Offline poj

  • Lid
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #4 Gepost op: 2011/11/02, 14:15:08 »
 =D dit doet precies het omgekeerd van wat ik beoogde ... de ww3 komt achter mijn root te staan en de browser probeert subtest.domein.com/www3 te openen. en dat bestaat natuurlijk niet ...

Idee├źn zijn welkom!

Offline edehont

  • Lid
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #5 Gepost op: 2011/11/05, 15:39:26 »
Volgens mij heeft de RewriteRule niets met de DocumentRoot te maken. Kun je nog even in een paar zinnen zeggen wat je precies wil bereiken? Door het probleem met de RewriteEngine is de vraagstelling een beetje onduidelijk geworden. (Voor mij dan.)
Ik heb de nodige RewriteRules werkend, dus ik zou je moeten kunnen helpen.

Om te beginnen, als je zegt dat je rule precies het omgekeerde doet, wat had je dan eigenlijk verwacht? Je rule geeft aan dat de '/' vervangen moet worden door '/www3/' en dat is precies wat er gebeurt...
Groeten,
Eric

Offline bram103

  • Lid
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #6 Gepost op: 2011/11/05, 19:40:34 »
Wat Eric al zegt, je probleem is niet met rewrite op te lossen. Als ik het goed begrijp wil je stylesheets voor pagina's in subtest uit de bovenliggende directory www3 halen. www3 ligt boven de documentroot daar kun je dus never nooit bijkomen.

Je kunt dit volgens mij op 2 manieren oplossen:

1. Maak in de directory subtest links naar de stylsheets in www3.

2. Haal het stylesheet uit het hoofddomein http://www.domein.com/stylesheet.css  i.p.v. /stylesheet.css (met plaatjes werkt dit, met stylesheets heb ik heb nooit geprobeerd maar ik denk dat dit ook moet werken.)

Gr,
Bram
 

Offline poj

  • Lid
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #7 Gepost op: 2011/11/06, 10:43:49 »
@ bram en edehont: Ik was al bang dat het niet zou kunnen, maar het zou toch mooi zijn als het had gekund. Ik ga eens na denken hoe ik het in wil richten. Ben nu toch alles naar php aan het overzetten, dan moet het ook niet zo moeilijk zijn om wat andere aanpassingen ook door te voeren.

@ edehont: doel is/was documenten beschikbaar maken die hoger dan de root liggen. Kan waarschijnlijk niet, maar als je een idee hebt, dan is het welkom. Er zijn volgens mij ook rewrites die een bepaalde verwijzing voor bepaalde documenten aanpassen. Maar weet niet hoe die werken en kon er met de engelstalige beschrijving ook niet echt uit.

groet,

Jop

Offline bram103

  • Lid
  • Steunpunt: Nee
Re: Apache2 rewrite rule
« Reactie #8 Gepost op: 2011/11/06, 15:34:10 »
Jop,

Rewrite werkt met Regular Expressions (zie http://www.regular-expressions.info/)

RewriteRule regularexpression url options

Het werkt dus ongeveer zo: van elke pagina die aan de server gevraagd wordt wordt de url met de regularexpression (1e argument) van de RewriteRule vergeleken, als het matched krijgt de url de waarde die als 2e argument (url) van de RewriteRule gegeven is.

RewriteRule   ^/$  /www3/  [R]  dus http://sutest.domain.com/ wordt http://sutest.domain.com/www3 dat is wat de server probeert terug te sturen (en dat bestaat niet)

http://sutest.domain.com/eenpagina.html matched niet met ^/$ en blijft dus http://sutest.domain.com/eenpagina.html

Ander (in de praktijk weinig bruikbaar) voorbeeld: RewriteRule   *  /www3/  [R] met deze regel wordt dus alles /www3/ (want alles matched met *)

Waar het dus om gaat is de regularexpresson, die doet de truuk.

Gr,
Bram