Rewriting op Apache goed instellen

Status
Niet open voor verdere reacties.
Beetje afhankelijk van welke oplossing je nu wil, maar zoiets (niet getest nog):

Code:
RewriteCond "%{HTTP_HOST}"   "^www\.example\.com" [NC,OR]
RewriteCond "%{HTTP_HOST}"   "example\.com"
RewriteRule "^/?(.*)"	"https://site.example.com/$1"
 
Bedankt voor het meedenken! Laat ik even e.e.a. samenvatten. Mijn website staat nu in /site. Met onderstaande rewrite werkt de doorverwijzing hiernaar prima.

Code:
RewriteCond %{REQUEST_URI} !^/site/
Rewriterule ^(.*)$ site/$1 [L]

Hierbij moest ik wel letten op de / achter site, omdat het anders niet voor alle verwijzingen werkte. Afbeeldingen werden niet ingeladen. Dat heeft vermoedelijk te maken met het feit dat /site een map /sites bevat. Hoe dan ook, het werkte, na het toevoegen van de trailing slash.

Ik voorzag al dat dit tot problemen zou leiden met /beta, en dat bleek inderdaad mis te gaan. Op beta.domein zie ik nu de normale website, zij het met wat broken links. Eigenlijk vreemd, want waarom is het .htaccess-bestand in de root van invloed op een subdomein dat direct naar een map gaat? Mijn provider adviseert een andere rewrite:

Code:
RewriteCond %{HTTP_HOST} ^ksvon\.nl$
RewriteRule (.*) http://www.ksvon.nl/$1 [R=301,L]
RewriteRule ^$ site [L]

Voor het eerst lukte het om de normale website en de beta-map naast elkaar toegankelijk te maken, top! Maar, ik loop tegen hetzelfde probleem aan: de afbeeldingen worden niet ingeladen. Het berust waarschijnlijk op hetzelfde als bij de eerste poging, maar dit keer lost een trailing slash het niet op.

Mijn doel is eenvoudig: al het normale verkeer moet naar /site en beta.domein moet naar /beta. Volgens mij heb ik daar een heel eenvoudige rewrite voor nodig met nét iets meer intelligentie dan ik nu al geprobeerd heb.

Ik heb het ook middels DNS geprobeerd. Door de .htaccess buitenspel te zetten en middels DNS leeg.domein en www.domein naar site.domein te forwarden, werkt het prima. De bezoeker ziet dan wel site.domein in de adresbalk verschijnen. Heb ik vrede mee, maar ik heb liever dat ze www zien. Normaliter maak je daarvoor een web alias, in plaats van een web forward, maar in deze situatie werkt dat niet. Bij gebruik van een web alias krijg ik namelijk slechts blanco pagina's te zien.

Inmiddels krijg ik al een week goedbedoelde maar uiteenlopende adviezen en weet ik niet meer of configuratie d.m.v. .htaccess of DNS de voorkeur heeft. Tot nu toe krijg ik met DNS het beste resultaat maar ik heb het idee dat configuratie via .htaccess volmaakt resultaat kan geven, namelijk dat men www.domein voor de normale website in /site ziet en beta.domein voor de website in /beta.
 
Welke locatie proberen de plaatjes dan te laden? Ik begrijp dat je een beetje gefrustreerd bent, maar met de debugging console, of eventueel rclicken op de plaats waar het plaatje hoort te staan zou je moeten laten zien wat de site probeert te laden.

Code:
RewriteCond %{REQUEST_URI} !^/site/

hier staat simpelweg: als het eerste deel van de request niet /site/ is, maak er site van.
Code:
RewriteCond %{REQUEST_URI} !^/site/
RewriteCond %{REQUEST_URI} !^/beta/
Rewriterule ^(.*)$ site/$1 [L]

Bij deze aanpassing wordt alleen herschreven als er geen /site/ of /beta/ staat. nu zou beta moeten werken. Maar het is nog steeds moeilijk voor ons op afstand te zien of dat dan de beste oplossing voor je is.

De code uit mijn vorige voorbeeld forwarden www.site.nl en site.nl naar site.site.nl en is dus puur alleen om altijd site.site.nl te triggeren zonder verdere DNS aanpassing. Bovendien is het niet DNS OF rewrite. Het kan ook EN zijn.
 
Sorry dat enige frustratie doorklinkt. Ik ben vooral verdwaald door de verschillende adviezen. Daardoor staat voor mij de vraag voorop: wat is de beste keuze om dit in te regelen? Ik ben heel blij dat je met mij meedenkt, bedankt!

Eigenlijk zeg je, voeg RewriteCond %{REQUEST_URI} !^/beta/ toe. Volgens mij had ik dat al eens geprobeerd, maar het kan best zijn dat ik mij vergis, omdat ik al zoveel geprobeerd heb.

Ik heb het uiteraard even getest, maar helaas zorgt het niet voor een verschil. Als ik de code die je geeft probeer te beredeneren, kom ik ook tot de conclusie dat het niet zal werken. Want hij zegt, volgens mij: 'indien de URI niet /beta/ bevat, herleid hem dan naar site'. En dat is precies wat ik niet wil. Volgens mij bevestig ik met deze regel alleen maar wat zonder die regel al vanzelf gebeurt. Moet ik niet zeggen: 'indien de URI niet /site/ bevat, herleid hem dan naar site, behalve als de URI /beta/ bevat'?

Nog niet makkelijk, Nederlands naar code converteren en andersom. Maar volgens mij zitten we in de goede hoek.
 
Laatst bewerkt:
Het is een impliciete AND dus je moet het lezen als:

Als NIET /site/ EN niet /beta/ DAN rewrite dus zou die /beta/ met rust moeten laten. let wel letterlijk: /beta/ niet /beta
 
Ik heb het even aan de binnenkant van mijn ogen bekeken. Wáárom werkt dit niet? Volgens mij kun je het gebruik van meerdere voorwaarden voor REQUEST_URI op diverse manieren interpreteren. Mijn conclusie is: /beta/ toevoegen haalt niets uit, want het bevestigt slechts de eerste regel indien je het als een optelsom uitdrukt. Maar, jouw uitleg klinkt óók logisch.

Door de verschillende codes met REQUEST_URI en HTTP_HOST te bekijken kwam ik op een andere gedachte. Ik wil stomweg alles rewriten naar /site, behalve als men binnenkomt op beta.domein. Oké, dus:

Code:
RewriteCond %{HTTP_HOST} !^beta.domein$

Yes, werkt! Goed, dan moet dat ook werken voor domein/beta. Dus:

Code:
RewriteCond %{REQUEST_URI} !/beta

Ja, werkt ook! Dus: alles gaat nu naar /site, zónder dat dit zichtbaar is in de adresbalk. Behalve als men binnenkomt op beta.domein of domein/beta.

Edit: ik steek mijn hand ervoor in het vuur dat de onderste code ook werkte, maar dat zal aan een cache te danken zijn geweest. Toen ik het nog even naliep, bleek namelijk van niet. Maar met wat logisch denkwerk ben ik erachter waardoor. Ik heb namelijk ook een rewrite ingesteld om alles zonder www naar www te rewriten. Daardoor maakt hij er www.domein/beta van, en dat werkt niet. Door die functie uit te schakelen, werkt domein/beta wel.

Intussen ben ik gewoon allerlei opties aan het testen, waaronder het nog eenvoudiger maken van de rewrite naar /site. Namelijk door www.domein en domein te rewriten naar /site. Dat is nog universeler dan /beta uitsluiten, denk ik. Dat lukt me vooralsnog alleen door eerst bovenstaande functie weer aan te zetten.

Maar goed, laat ik dit niet te langdradig maken: het is duidelijk dat de ene functie de andere kan bijten en ik zie er wel een uitdaging in om tot de beste code te komen middels de juiste variabelen. Ik kan mij voorstellen dat het daarbij goed kan werken om bepaalde zaken in een .htaccess binnen /site te regelen, zodat het hierarchies werkt en je minder met uitzonderingen hoeft te werken. Meedenken daarin is welkom, maar nu is dit topic nog een beetje overzichtelijk voor lezers met dezelfde basis-vraag. Daarop volstaat namelijk bovenstaand antwoord.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan