htaccess probleempje
http://xxxxxxxxx.com/index.php?taal_id=3&seo_url=homepage-en
Daar wil ik van maken:
http://xxxxxx.com/homepage-en
Nu kwam ik deze site tegen:
http://www.generateit.net/mod-rewrite/ en die maakt de volgende code
Nu is mijn probleem dat taal_id hard coded staat in de htaccess. Deze kan variabel zijn. Het kan ook zijn dat je de volgende url hebt:
Dan gaat de htaccess dus niet op
Hoe kan ik dit goed krijgen?
Dan nog een volgende punt:
Al mijn URLs bouw ik op deze manier op: index.php?taal_id=3&seo_url=homepage-en
Hoe kan ik ervoor zorgen dat dit automatisch wordt omgezet? Als ik bijvoorbeeld naar http:///xxxxxxx.com/index.php?taal_id=3&seo_url=homepage-en ga dat het meteen een seo url wordt?
Code (php)
1
2
2
RewriteEngine On
RewriteRule ^([a-zA-Z]{2,3})/([^/]*)\.html index.php?taal_id=$1&seo_url=$2
RewriteRule ^([a-zA-Z]{2,3})/([^/]*)\.html index.php?taal_id=$1&seo_url=$2
Dan krijg je dus url's als:
http://www.homepage.com/en/some-page.html
http://www.homepage.com/de/some-page.html
En eventueel kunt met RewriteCond controleren of de taal parameter wel of niet is doorgestuurd en zo niet een tijdelijke redirect doen naar:
http://www.homepage.com/nl/some-page.html
Het werkt aardig,
Eigenlijk heb ik deze URL:
http://demo.simpelcms.com/index.php?taal_id=1&pagina_id=1
Hoe kan ik daar zoiets mooi van maken? Taal id en pagina id heb ik nodig om de pagina's en talen op te halen. Deze wil ik niet gebruiken in de seo_url, maar heb ik dus wel nodig
Kan dit zoiets worden als:
http://demo.simpelcms.com/nl/homepage-nl.html
Als het moet kan ik extra variabelen in de URL meesturen.
nl is een waarde die in de database staat en home-page-nl is ook een waarde die in de database staat. Ik denk dat ik hier iets mee moet kunnen doen, maar weet niet hoe.
Gewijzigd op 01/11/2011 16:08:53 door Pong Zor
Je moet gewoon de URL aanroepen en testen.
En extra parameters aangeven kun je inderdaad met variabelen als in de query string al is dat wel minder elegant maar vergeet dan niet in je rewrite achter seo_url=$1&%{QUERY_STRING}% mee te geven, of iets in die richting (weet niet meer exact hoe die variabele heette) want anders worden je URL-query parameters niet mee gestuurd bij het rewriten.
http://demo.simpelcms.com/nl/homepage-nl.html
oorspronkelijk:
http://demo.simpelcms.com/index.php?taal_id=1&pagina_id=1
Dan is deze variabele leeg:
$smarty->display($rij_pagina['template'] . '.template');
Dat is logisch want ik gebruik deze query om de gegevens op te halen:
Code (php)
1
2
3
4
2
3
4
$query_pagina = sprintf("SELECT p.*, te.template FROM paginas as p, templates as te WHERE p.template_id=te.template_id AND pagina_id='%s' AND taal_id='%s'",
mysql_real_escape_string($pagina_id),
mysql_real_escape_string($taal_id)
);
mysql_real_escape_string($pagina_id),
mysql_real_escape_string($taal_id)
);
Vandaar dat ik die pagina_id en taal_id via de $_GET ophaal
Wat er nu gebeurd:
Code (php)
1
2
2
SELECT p.*, te.template FROM paginas as p, templates as te WHERE p.template_id=te.template_id AND pagina_id='homepage-nl' AND taal_id='nl'normale page
Warning: Smarty error: unable to read resource: ".template" in /home/vhosts/simpelcms.com/subdomains/demo/httpdocs/includes/libs/Smarty.class.php on line 1093
Warning: Smarty error: unable to read resource: ".template" in /home/vhosts/simpelcms.com/subdomains/demo/httpdocs/includes/libs/Smarty.class.php on line 1093
Hij pakt als pagina_id homepage-nl, maar dat wil ik niet.
Ik wil in die query gewoon weer mn ID's hebben, maar als seo url wel:
http://demo.simpelcms.com/nl/homepage-nl.html
Kan ik niet het volgende doen:
http://demo.simpelcms.com/index.php?taal_id=1&pagina_id=1&taal=nl&seo_url=homepage-nl
Dan moet de htaccess niks doen met:
index.php?taal_id=1&pagina_id=1&
maar wel met seo_url en taal
Toevoeging op 01/11/2011 18:10:04:
Hmm. Ik kom er niet uit zoals het nu is worden dus de /nl/homepage-nl meegestuurd in de query. Ik wil niet het woord maar de id's meesturen, iemand nog tips?
Gewijzigd op 01/11/2011 16:36:50 door Pong Zor
Ik heb het al opgelost, ik weet wel welke variabelen beschikbaar heb, maar htaccess deed niet wat ik wilde. Query omgebouwd werkt nu wel.
Kun je specifieker zijn in je oplossing? Wellicht help je er anderen ook mee.
pagina_id en taal_id verkrijg ik via een GET. Aangezien ik mooie URL wils kon ik niet de pagina_id en taal_id mee sturen want dan snapte mn htaccess het niet
Als ik dan bijvoorbeeld te URL aanriep
Oorspronkelijk:
http://demo.simpelcms.nl/index.php?pagina_id=1&taal_id=1
Dan deed mn query het volgende:
Dat resulteert in het volgende
Vervolgens kreeg ik de goede pagina terug
Mooie URL
http://demo.simpelcms.com/nl/home
Dat resulteert in het volgende
Dit resulteerde in een foutmelding, want er bestaat geen pagina met nl als id en home als taal_id.
In plaats van een pagina op de halen via pagina_id in combinatie met taal_id haal ik een pagina op gebaseerd op seo_url.
Dan ziet het er zo uit:
Oorspronkelijk:
http://demo.simpelcms.nl/index.php?seo_url=home
Vervolgens heb ik een check ingebouwd dat bij het aanmaken van een pagina de seo url niet mag voorkomen in de database, omdat je anders de verkeerde pagina's ophaalt.
Misschien niet de beste oplossing, maar wel een werkbare
.htaccess
Gewijzigd op 02/11/2011 13:55:50 door Pong Zor
Oke duidelijk, goed dat het opgelost is. Maar taalsupport heb je dus achterwege gelaten? Via de URL dan tenminste?
http://demo.simpelcms.com/
Voorlopig even geen /nl/ of /en/ om taal aan te duiden. Kan ik ook wel inbouwen dan moet ik seo_url + taal_id combinatie checken, dat zou betekenen dat ik ook niet een unieke seo_url hoef te hebben aangezien de combinatie van seo_url en taal_id uniek moet zijn.
Gewijzigd op 02/11/2011 14:25:04 door Pong Zor