Page 1 of 1

[OPGELOST] RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 12:06 pm
by frankmanl
In .htacces wil ik een aantal zaken combineren:
1) www. forceren - als je domein.nl intypt kom je terecht op www.domein.nl
Hiervoor gebruik ik:

Code: Select all

RewriteCond %{HTTP_HOST} !^www.domein.nl$
RewriteRule ^(.*)$ http://www.domein.nl/$1 [R=301]
2) directory naam uit URL verbergen - mijn installatie staat in http://www.domein.nl/cmsms/, maar ik wil dat /cmsms/ niet wordt getoond in de adresbalk.
Hiervoor gebruik ik:

Code: Select all

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule !^cmsms(/?|/.+)$ /cmsms%{REQUEST_URI} [L]
3) error 404 (pagina niet gevonden) direct laten doorverwijzen naar de homepage in /cmsms/.
In .htaccess neem ik deze regel op:

Code: Select all

ErrorDocument 404 /index.html
En domein.nl/index.html ziet er zo uit:

Code: Select all

<meta http-equiv="refresh" content="0;URL=http://www.domein.nl/cmsms/" />
Je zou zeggen dat dit allemaal moet werken, echter de combinatie van de ErrorDocument en RewriteRule !^cmsms(/?|/.+)$ /cmsms%{REQUEST_URI} [L] geeft een probleem - de errorafhandeling wordt niet gedaan conform mijn .htaccess, maar er wordt een standaard 404 NOT FOUND melding gegeven.
Wanneer ik de ReRwriteRule uitschakel werkt de errorafhandeling wel, maar dan is in de adresbalk de map /cmsms/ zichtbaar.
Het complete .htaccess bestand ziet er zo uit:

Code: Select all

AddHandler x-httpd-php53 .php

# redirect error 404 page not found
ErrorDocument 404 /index.html

Options -Indexes
RewriteEngine On
RewriteOptions inherit

# volgende regels vrijmaken voor verbergen van /cmsms in de URL
RewriteCond %{SCRIPT_FILENAME} !-f
#RewriteRule !^cmsms(/?|/.+)$ /cmsms%{REQUEST_URI} [L]

# laat domein.nl doorverwijzen naar www.domein.nl
RewriteCond %{HTTP_HOST} !^www.domein.nl$
RewriteRule ^(.*)$ http://www.domein.nl/$1 [R=301]
Ik heb de ReWriteRule maar even uitgeschakeld, omdat ik de foutafhandeling op dit moment belangrijker vind dan het verbergen van /cmsms.

Hoe krijg ik dit voor elkaar?

Frank

Re: RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 12:27 pm
by deactivated010521
----------

Re: RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 1:11 pm
by frankmanl
OK, maar die werkt alleen voor niet gevonden pagina's binnen het cmsms-systeem.
Ik zit met het volgende:
De site was voorheen opgezet in domein.nl en submappen.
Ik heb nu een cms geïnstalleerd in domein.nl/cmsms/.
Alle bestanden van de oude site heb ik verwijderd, dus in domein.nl staat alleen nog het bestand index.html (dat direct doorschakelt naar het cms) en de submap cmsms met daarin het hele cms.
Google verwijst nog naar bijv. domein.nl/submapx/bestand.html.
Dàt bestand bestaat niet en ik wil dat er dan een error 404 wordt aangeroepen die direct doorschakelt naar het cms.

F.

Re: RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 3:23 pm
by frankmanl
Ik ben intussen wel verder gekomen.
* Ik heb de error afhandeling verwijderd uit het .htaccess bestand.
* Heb in CMSMS een error 404 pagina aangemaakt die nu alle fouten afvangt en doorschakelt naar http://www.domein.nl/cmsms/ (de homepage). Die 404-pagina ziet er zo uit:

Code: Select all

<meta http-equiv="refresh" content="0;URL={cms_selflink href='home' }">{content}
Dit heb ik uitgebreid getest en alle 404-fouten worden inderdaad via deze pagina afgehandeld.
* De .htaccess ziet er nu zo uit:

Code: Select all

AddHandler x-httpd-php53 .php
Options -Indexes
RewriteEngine On
RewriteOptions inherit

# volgende regels vrijmaken voor direct doorverwijzen naar cmsms-map en verbergen van /cmsms
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule !^cmsms(/?|/.+)$ /cmsms%{REQUEST_URI} [L]

# laat domein.nl doorverwijzen naar www.domein.nl
RewriteCond %{HTTP_HOST} !^www.domein.nl$
RewriteRule ^(.*)$ http://www.domein.nl/$1 [R=301]
* In de config.php staat deze regel:

Code: Select all

$config['root_url'] = 'http://www.domein.nl';
Er is nog één probleem overgebleven: bij alle pagina's is /cmsms uit de URL verdwenen (dus http://www.domein.nl/pagina) behalve bij de homepage, waar in de adresbalk staat http://www.domein.nl/cmsms/
Wanneer ik over het menu beweeg geeft de button van de homepage als koppelingslokatie http://www.domein.nl/, maar na klikken komt er toch http://www.domein.nl/cmsms/ in de adresbalk te staan.
Wie helpt me dit laatste stukje oplossen?

Frank

Re: RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 3:34 pm
by deactivated010521
----------

Re: RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 5:30 pm
by frankmanl
Arnoud, de error-afhandeling heb ik gedaan zoals je opgaf, dat werkt nu prima.
Ook de map /cmsms is niet meer zichtbaar in de URL, bij geen enkele pagina.
Maar het forceren van www. lukt nog niet.
De .htaccess is nu

Code: Select all

AddHandler x-httpd-php53 .php
Options -Indexes
RewriteEngine On
RewriteOptions inherit
RewriteBase /cmsms

# direct doorverwijzen naar cmsms-map en verbergen van /cmsms uit de URL
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule !^cmsms(/?|/.+)$ /cmsms%{REQUEST_URI} [L]

# laat wilbertvandersteen.nl doorverwijzen naar www.wilbertvandersteen.nl
RewriteCond %{HTTP_HOST} !^wilbertvandersteen.nl$
RewriteRule ^(.*)$ http://www.wilbertvandersteen.nl/$1 [R=301]
Als je nu wilbertvandersteen.nl invoert in de adresbalk krijg je weliswaar de homepage, maar er staat geen www. in de URL.
Bovendien klopt in Firefox op een of andere wijze het font niet (Chrome, IE, Opera en Safari tonen dat probleem niet). Dat hoort op die pagina Rockwell te zijn, maar is een default browser-font zo te zien. Ook na legen van de browserbuffer blijft dit probleem.
Zodra je een menu-item kiest is de lay-out in orde en staat ook de www. in de URL.

Als ReWriteCond heb ik overigens ook gebruikt

Code: Select all

RewriteCond %{HTTP_HOST} !^www.wilbertvandersteen.nl$
en

Code: Select all

RewriteCond %{HTTP_HOST} !^www\.wilbertvandersteen\.nl$
Deze syntaxen ben ik al zoekende ook tegengekomen, maar het maakt allemaal niets uit.

In de config.php staat nog steeds deze regel:

Code: Select all

$config['root_url'] = 'http://www.domein.nl';
dus zonder /cmsms aan het einde.
Waar heb ik nu nog een fout zitten?

F.

Re: RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 5:40 pm
by deactivated010521
----------

Re: RewriteRule in combi met ErrorDocument

Posted: Tue Jan 24, 2012 6:39 pm
by frankmanl
edit 25-1-12: ben er nog een tijd mee bezig geweest, maar niets werkt. Ik leg het nu eerst maar eens bij de host neer.

Helaas, dat helpt allemaal niets.
Weghalen van die eerste twee regels resulteert in een fout, dus ik heb ze weer teruggeplaatst:
De pagina verwijst niet op een juiste manier door
Firefox heeft vastgesteld dat de server het verzoek voor dit adres doorverwijst op een manier die nooit zal eindigen.
Het wijzigen van [R=301] naar [L,R=301] maakt geen verschil - de www. wordt nog steeds niet toegevoegd aan de URL.

Dat font speelt ook nog steeds op - een van de raarste dingen die ik heb gezien, want alle css werkt naar behoren, behalve het font. Ik heb het als volgt gedefinieerd

Code: Select all

font: 100%/1.4 Helvetica, Verdana, Arial, sans-serif;
en ik werk met @font-face, dat font Rockwell weergeeft. Het font dat wordt weergegeven is vreemd genoeg Times New Roman - het default font van Firefox.

Re: RewriteRule in combi met ErrorDocument

Posted: Wed Jan 25, 2012 9:45 am
by deactivated010521
----------

Re: RewriteRule in combi met ErrorDocument

Posted: Wed Jan 25, 2012 12:16 pm
by frankmanl
Opgelost, met dank aan mijn host (maar ook aan Arnoud! ;) )
Nog even de .htaccess die ik had:

Code: Select all

AddHandler x-httpd-php53 .php
Options -Indexes
RewriteEngine On
RewriteOptions inherit
RewriteBase /cmsms

# direct doorverwijzen naar cmsms-map en verbergen van /cmsms uit de URL
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule !^cmsms(/?|/.+)$ /cmsms%{REQUEST_URI} [L]

# laat wilbertvandersteen.nl doorverwijzen naar www.wilbertvandersteen.nl
RewriteCond %{HTTP_HOST} !^wilbertvandersteen.nl$
RewriteRule ^(.*)$ http://www.wilbertvandersteen.nl/$1 [R=301]
Hiervan zegt mijn host:
Ik zie dat u een [L] heeft staan bij de volgende regel:
RewriteRule !^cmsms(/?|/.+)$ /cmsms%{REQUEST_URI} [L]
De [L] houdt in dat volgende regels niet meer worden gelezen, waardoor de laatste 2 regels niet meer worden uitgevoerd. Als u de [L] weghaalt op de betreffende regel ziet u dat www wel voor de domeinnaam wordt gezet.
Verder heeft u de regel RewriteBase /cmsms opgenomen. Dat klopt volgens mij ook niet, want u wilt dat de regels gelden vanaf de root directory. Ik heb voor die regel een # gezet, zodat dit wordt gezien als commentaar.
Zijn aanwijzingen opvolgend heb ik het helemaal voor elkaar: www. wordt geforceerd, de map cmsms/ wordt niet getoond in de URL en omdat de www. nu steeds wordt geforceerd heb ik ook het font-probleem niet meer.
Dank voor de hulp, ik ga hier even goed notitie van maken.

Oh, voor de volledigheid, de .htaccess ziet er nu zo uit:

Code: Select all

AddHandler x-httpd-php53 .php
Options -Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteOptions inherit

# direct doorverwijzen naar cmsms-map en verbergen van /cmsms in URL
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule !^cmsms(/?|/.+)$ cmsms%{REQUEST_URI}

# laat domein.nl doorverwijzen naar www.domein.nl
RewriteCond %{HTTP_HOST} ^domein\.nl$ [NC]
RewriteRule ^(.*)$ http://www.domein.nl [L,R=301]