##Catch url structure for normal pages
# check that the request url is neither a file nor a directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/?$ /index.php?page=$1&var1=$2&var2=$3&var3=$4&var4=$5 [NC,L]
# check that the request url is neither a file nor a directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)/(.*)/?$ /index.php?page=$1&var1=$2&var2=$3&var3=$4 [NC,L]
# check that the request url is neither a file nor a directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)/?$ /index.php?page=$1&var1=$2&var2=$3 [NC,L]
# check that the request url is neither a file nor a directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/?$ /index.php?page=$1&var1=$2 [NC,L]
# check that the request url is neither a file nor a directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ /index.php?page=$1 [NC,L]
Zoals je ziet is er eerst een redirect om https te forceren, en vervolgens een aantal redirects op SEO-vriendelijke urls om te zetten voor afhandeling in mijn php-scripts.
Probleem ontstaat wanneer er een http:// request wordt gedaan, want dan krijg ik een probleem: "too many redirects".
Dat begrijp ik, want eerst een redirect om er https van te maken, en vervolgens nóg een redirect om de url verder te verwerken. Nu zoek ik al een tijdje naar een oplossing voor dit probleem maar kan het niet vinden.
Ik vermoed dat ik rules zal moeten combineren, maar hoe..?
Dat zet je bovenaan (na de https redirect) en dat scheelt je een berg code.
Tweede stap doe ik zo:
ALLES redirecten naar index.php
in index.php zoek ik dan wel uit via $_SERVER welke "mappen" er in de url stonden.
Dat is veel flexibeler. (ondanks dat jouw versie nog redelijk overzichtelijks, omdat je alleen maar var1, var2 etc gebruikt en niet voor "als de 2e term Edit is, dan ..."
Goedemorgen Ivo,
Dank je wel voor jouw feedback. Ik begrijp wat je bedoelt.
Wat ik niet zie is hoe met jouw oplossing het probleem van de multiple redirects wordt opgelost. Immers, wanneer de site wordt aangeroepen zonder https:// dan volgen er toch nog steeds 2 redirects..?
Correct. Alleen als de scripts zelf daarna nog 14 keer gaan redirecten zou je op too many uitkomen, immers 15 wordt in de meeste browsers beschouwd als de limiet.
Niet heel erg gebruikelijk, maar HTTPS zou je ook op poort 80 kunnen forceren volgens mij? Kun je in plaats van een poort niet beter controleren of je in "HTTPS modus" zit, en op grond daarvan (indien dit niet het geval is) redirecten naar de https-variant?
Ik denk dat het eerste rewriterule/rewritecond blok de boosdoener is. En zoniet, dan nog is de controle nogal vreemd :]. Het doet zowel een aanname over op welke poort de (https) site (al dan niet) actief is. Misschien kun je het dan ook beter omdraaien, als je weet dat https actief is op poort X en de huidige poort NIET X is, dat je dan redirect naar https? Maar het combineren van deze twee is nog steeds raar dus wellicht is de controle op "HTTPS modus" beter.
Een interessante vraag is dus sowieso: op welke poorten zijn de (http en https) sites actief?
Maar je bent vrij om daar varianten op te bedenken. Bijvoorbeeld om een test-server te kunnen draaien. Dan zou http op poort 81 kunnen zitten. Of op 8080.
Idem voor https natuurlijk.
$_SERVER['HTTPS'] heeft bij mij wel eens het probleem geleverd, dat per server die wel of niet bestond, of niet overal dezelfde inhoud had.
[size=xsmall]Toevoeging op 30/01/2017 21:20:23:[/size]
Je kunt trouwens in Firefox middels Firebug meestal de redirects meelezen. Dat zou een aanwijzing kunnen opleveren.
Echter, na aanroepen van een http:// request nog steeds de foutmelding in Chrome: ERR_TOO_MANY_REDIRECTS (en in FireFox een vergelijkbare melding).
Ziet iemand iets dat niet klopt in mijn code?
ik zou dat omdraaien: wat moet het zijn als het WEL https is? dat is waarschijnlijk on of ON of On
Check dat even in $_SERVER.
Als je een http-verbinding hebt, kan het zijn dat $_SERVER['HTTPS'] of %{HTTPS} in zijn geheel ontbreekt.
>> RewriteCond %{HTTPS} ! ON
Verder zou je de redirect op regel 17 eens naar een heel andere site kunnen laten verwijzen. Bijvoorbeeld nu.nl.
Dan weet je in elk geval dat die redirect werkt.
(dat kun je ook met firebug zien, maar dat lukt je kennelijk nog niet)