Voor mijn website wil ik de non-www url doorsturen naar de www-URL. Nu heb ik een rewriterule gefabriceerd die zijn werk wel goed doet, alleen de Multiviews lijken roet in het eten te gooien...

Ik heb dit in mijn .htaccess staan:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Options +FollowSymLinks
Options MultiViews


Echter steeds als er een bestand wordt aangeroepen (/news bijv. wat in werkelijkheid dus news.php is) komt de .php-extentie er steeds bij.

http://site.nl/news/1337 wordt dan: http://site.nl/news.php/1337
http://www.site.nl/news/1337 blijft verder gewoon zo, zoals het prima hoort.

Iemand enig idee hoe dit kan, en wat de oplossing is?
Ik heb zojuist al geprobeerd om de Options Multiviews bovenaan te zetten, maar dat maakt niks uit.
Heb je al vastgesteld wanneer het mis gaat?

Voor de redirect, of erna? Wat is de waarde van $1?

Stuur de waarde eens naar een script: <nieuwe locatie>/test.php?test=$1

En als je nog aan het testen bent is wellicht het weglaten van de 301 statuscode handig, anders heb je op den duur misschien onvoorspelbare resultaten omdat je browser/iets anders de (mogelijk ongewenste) shortcut onthoudt.
Thomas van den Heuvel op 08/03/2015 16:32:21

Heb je al vastgesteld wanneer het mis gaat?

Als ik een na de hostname een bestand opvraag zonder .php-extentie.


Voor de redirect, of erna? Wat is de waarde van $1?
Stuur de waarde eens naar een script: <nieuwe locatie>/test.php?test=$1

Leg eens uit? Ik weet toch al wat ik verstuur?
Leg eens uit? Ik weet toch al wat ik verstuur?

Weet je dat zeker? :) Zolang je niet weet wat de oorzaak is moet je niets uitsluiten (assume nothing).

Mogelijk wordt http://site.nl/news/1337 al vertaald naar http://site.nl/news.php/1337 alvorens je geredirect wordt naar http://www.site.nl/news.php/1337.

Dit wil je misschien uitsluiten zodat je doelgerichter kunt zoeken naar de achterliggende oorzaak.

EDIT: nu ik je eerdere bericht lees: er zit blijkbaar al op een of andere manier een verschil tussen domeinen die niet met www beginnen, en domeinen die dit wel doen, gegeven de omzettingen die al plaatsvinden. Waar komt dat dan vandaan?
En daarom heb ik die Multiview-option ook al naar boven verplaatst, om dit uit te sluiten.
Zonder deze hele reguliere expressie werkt die Multiviews juist prima.
<?php
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.nl$ [nc]
RewriteRule ^(.*)$ http://www.domain.nl/$1 [r=301,nc]
?>

dit moet werken ik gebruik dit ook.
Eeyk Vd noot op 08/03/2015 19:46:05

<?php
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.nl$ [nc]
RewriteRule ^(.*)$ http://www.domain.nl/$1 [r=301,nc]
?>

dit moet werken ik gebruik dit ook.

Ik zie weinig verschillen met die van mij? Jij gebruikt ook MultiViews?
Hier nog een andere variant:


RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%1/$1 [R=301,L]
Ik ga het uitproberen, maar het lijkt alsof alles op hetzelfde neerkomt, en niks doet met wat er na de hostname komt. En die .php wil ik dus wegfilteren.
^ zie mijn EDIT: nu ik je eerdere bericht lees: er zit blijkbaar al op een of andere manier een verschil tussen domeinen die niet met www beginnen, en domeinen die dit wel doen, gegeven de omzettingen die al plaatsvinden. Waar komt dat dan vandaan?

Mogelijk spelen inmiddels gecachede redirects je parten?

Wat je ook zou kunnen doen is een optionele (.php) eraf strippen, dat zou altijd moeten werken? Maar dat is het onjuist gedrag omzeilen ipv oplossen...

Reageren