Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[htaccess] index.php redirecten met htaccess

Pagina: 1
Acties:

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01 15:19
Ik heb op een apache server in de root een subdirectory aangemaakt. In deze directory heb ik een website geplaatst. Vervolgens heb ik een domeinnaam geredirect in htaccess naar deze subdirectory, maar dan op een manier alsof de browser een rootdirectory bezoekt in plaats van een subdirectory. Dus je krijgt in je browser adresbalk gewoon www.domein.com te zien ipv www.domein.com/subdirectory .

De code werkt. Er is echter een probleem mee. Wanneer ik in een browser domein.com/index.php intyp, dan wordt er ineens niet geredirect naar domein.com/subdirectory/index.php en dit is juist wel de bedoeling.

Hoe krijg ik dit alsnog voor elkaar?

Hier is de code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<IfModule mod_rewrite.c>

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]

RewriteCond %{HTTP_HOST} ^www.example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01 15:19
Ben inmiddels een stap verder gekomen.

De code die ik nu heb doet bijna alles wat ik wil, op 1 ding na.

Domein.com blijft nu zichtbaar in de adresbalk van de browser in plaats van dat je een subdirectory in de url ziet en tevens werkt het voor bestanden zoals index.php welke zich in een url kunnen bevinden.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the address bar of a browser
<IfModule mod_rewrite.c>

Options +FollowSymLinks
 
RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com
RewriteCond %{REQUEST_URI} !/subdirectory/
RewriteRule ^(.*)$ /subdirectory/$1 [L]
</IfModule>


Het enige dat nu nog niet werkt is namelijk relatieve links in stukken Javascript code. Deze relatieve links in javascript code linken ofwel naar de werkelijke root van een server of ze veroorzaken een redirect loop.

Ook relatieve html links en paden werkten niet, maar dit heb ik kunnen oplossen door een base tag toe te voegen in de header van de website en deze dynamisch te definieren mbv PHP, namelijk:

code:
1
<base href="http://<?php echo $_SERVER['HTTP_HOST'];?>/subdirectory/" />


Dit kan je ook doen zonder PHP te gebruiken, maar dan moet je de url hardcoden in de base tag, namelijk:

code:
1
<base href="http://www.mydomain.com/subdirectory/" />


Wat werkt nu dus:

1. Redirecten naar een subdirectory via een htaccess bestand in de root van de server. Behoud van de domeinnaam blijft gewaarborgd zonder subdirectory in de url.

2. Relatieve links/paden in html code werken doordat er een base-tag is toegevoegd aan de header.

3. Doordat alle paden in de PHP code van de website relatief waren gedefinieerd, was hiervoor niets nodig om alle php code werkend te houden na de redirect.

Wat werkt niet:

1. Relatieve paden/links in Javascript code. Een oplossing hiervoor is om het subdirectory pad in een php variabele op te slaan en te echo-en _voor_ elke relatieve link/pad in de stukken Javascript code op de website. Dit is omslachtig en arbeidsintensief, maar vooralsnog heb ik dit niet kunnen oplossen met een simpele en/of elegante oplossing. Echter is dit wel een oplossing, albeit arbeidsintensief als je veel relatieve paden in je javascript hebt staan.

Als iemand nog een betere htaccess code oplossing weet die ook het probleem met relatieve paden/links in stukken javascript code oplost, dan hoor ik het graag.

Iedereen die echter wil doen wat ik hier heb geprobeerd, zal in iedergeval met deze stukken code en de daarbijbehorde aanwijzingen een stuk verder komen. Heel veel stukken htaccess code op internet zijn slecht geschreven en werken gewoonweg niet.

Het heeft me volle 2 dagen gekost om dit allemaal uit te zoeken en ik heb nauwelijks geslapen, maar ik heb mijn website in ieder geval werkend in een subdirectory waarnaar geredirect wordt door de domeinnaam die ik wil. Hoera!

Hopelijk zullen meer mensen hier iets aan hebben. Het zal je veel werk, stress en frustratie besparen, dat kan ik je garanderen!

:)

[ Voor 5% gewijzigd door Arcane Apex op 11-05-2013 15:26 ]