Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1912
River snart ut håret her

Prøver å lære meg hvordan mod_rewrite og .htaccess virker. Kort om hvordan serveren min er satt opp:
Kjører opensuse 13.2 og apache 2.4.10. DocumentRoot er satt til /srv/www/htdocs. Det vil si at hvis jeg åpner localhost på serveren eller ip'en (192.168.1.3) på en annen maskin i nettverket, så viser den /srv/www/htdocs/index.html.

Kjører også mod_userdir.c, slik at hvis jeg går inn på eks. localhost/~bruker/, så vil /home/bruker/public_html/index.html komme opp. So far, so good.

Men her kommer problemet. Jeg prøver å kjøre en enkel "rewrite", ved å legge følgende kode inn i en .htaccess-fil, under /home/bruker/public_html/

Kode

RewriteEngine On
RewriteRule . index.html
Tanken er da at uansett hvilket dokument under localhost/~bruker/* jeg åpner, så skal den rewrite til index.html. Og det gjør den, på en måte.

Problemet er bare at den forsøker å åpne /srv/www/htdocs/home/bruker/public_html/index.html, i stedet for /home/bruker/public_html/index.html.

Den legger altså til DocumentRoot-path'en, før deg forsøker å åpne riktig dokument. Og det går jo ikke!

Hvordan kan jeg få "RewriteRule . index.html" til å åpne den index.html-fila som ligger i samme mappe som .htaccess-fila, og ikke index.html under /srv/www/htdocs/home/bruker/public_html/??
Får du lest filer fra userdir uten htaccess da? For det virker nesten som det skal feile også.
Sist endret av fuzzy76; 31. oktober 2015 kl. 14:56.
Siden mod_userdir er en stor hack så kan det være du må benytte deg av RewriteBase i tillegg.
Sitat av fuzzy76 Vis innlegg
Får du lest filer fra userdir uten htaccess da? For det virker nesten som det skal feile også.
Vis hele sitatet...
Ja, så lenge jeg ikke bruker noen .htaccess-fil og rewriterule så får jeg tilgang til alt jeg måtte legge under /home/bruker/public_html/

Sitat av Deezire
Siden mod_userdir er en stor hack så kan det være du må benytte deg av RewriteBase i tillegg.
Vis hele sitatet...
Har du noen forslag til hvordan jeg skal bruke RewriteBase? Hvis jeg prøver med

Kode

RewriteBase /
Så ender den opp med å vise /srv/www/htdocs/index.html

Det virker som at når jeg legger inn en RewriteRule i .htaccess, så tror plutselig apache at root-mappen er /srv/www/htdocs/ , selv om .htaccess-fila legger under ~bruker/public_html/

Det er jo ikke noe verre enn at jeg kan legge alle prosjektene mine under /srv/www/htdocs/ i stedet for i userdir, men irriterende å ikke klare finne ut av hvorfor det ikke virker
Sist endret av trallaren; 1. november 2015 kl. 00:19.
Det er dessverre noen år siden jeg har brukt Apache2, så jeg er litt rusten, men jeg antar at RewriteBase går ut fra DocumentRoot, og den vil da være satt i konfigurasjonen som blir lastet inn, typisk default i ditt tilfelle. Det er litt av den grunn at mod_userdir er en dirty hack.

Men har du prøvd å sette RewriteBase til /~username/? Hvis du er veldig heldig så vil det fungere, er du uheldig vil du få en race condition som ikke kan løses. Rewrite på undermapper har mange gotchas, rewrites på det som effektivt blir Alias^2 er bare å be om trøbbel.

Alternativt, så kan du se på mod_vhost_alias, da kan du sette opp dynamisk mapping av virtualhost mot en lokal bruker, også litt dirty. Kort fortalt endrer vi DocumentRoot basert på domenet i Host-headeren, det gjør at vi kan gjøre en del fancy triks.

Kode

# %1 refererer til den første delen av domenet. Dvs. username i username.example.com
UseCanonicalName Off
VirtualDocumentRoot /home/%1/public_html
Ja, takk skal du ha! /~username/ fungerte faktisk. Har prøvd med ~username/ tidligere, men da fikk jeg bare error 500, og "argument is not a valid URL" i error_log.
Sist endret av trallaren; 1. november 2015 kl. 14:54.