Moderator |
|
Hey, ik ben al een tijdje met search-engine-safe (SES) URL's bezig waarbij ik URL's van de vorm
index.php?mod=hoofdcat&sub=subcat&var1=val1&var2=val2
wil omzetten naar URL's van de vorm
index/hoofdcat/subcat/var1/val1/var2/val2
en met .htaccess de terugvertaling doe.
Dit is mij al gelukt op de volgende manier:
Options +FollowSymLinks
RewriteEngine on
# Variabelen, 3 variabelen
RewriteRule index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4&$5=$6&$7=$8 [L]
# Variabelen, 2 variabelen
RewriteRule index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4&$5=$6 [L]
# Variabelen, 1 variabele
RewriteRule index/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4 [L]
# Geen variabelen, optionele trailing slash
RewriteRule index/(.*)/(.*)(/)*$ /index.php?mod=$1&sub=$2 [L]
# Geen variabelen, alleen hoofdmodule opgegeven
RewriteRule index/(.*)(/)*$ /index.php?mod=$1 [L]
# Geen variabelen, geen hoofd- of submodule
RewriteRule index(/)*$ /index.php [L]
Options +FollowSymLinks RewriteEngine on # Variabelen, 3 variabelen RewriteRule index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4&$5=$6&$7=$8 [L] # Variabelen, 2 variabelen RewriteRule index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4&$5=$6 [L] # Variabelen, 1 variabele RewriteRule index/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4 [L] # Geen variabelen, optionele trailing slash RewriteRule index/(.*)/(.*)(/)*$ /index.php?mod=$1&sub=$2 [L] # Geen variabelen, alleen hoofdmodule opgegeven RewriteRule index/(.*)(/)*$ /index.php?mod=$1 [L] # Geen variabelen, geen hoofd- of submodule RewriteRule index(/)*$ /index.php [L]
Maar ik heb nu 2 problemen:
* 1. Voor elk aantal variabele-waarden-paren moet ik een nieuwe RewriteRule maken, terwijl ik eigenlijk iets wil hebben van de vorm
RewriteRule index/(.*)/(.*)(/(.*)/(.*))*$ /index.php?mod=$1&sub=$2&........ [L]
RewriteRule index/(.*)/(.*)(/(.*)/(.*))*$ /index.php?mod=$1&sub=$2&........ [L]
Dus altijd twee keer (.*) voor respectievelijk de hoofdpagina ($_GET['mod']) en de subpagina ($_GET['sub']) waar ik op zit, gevolgd door een willekeurig aantal key-value paren (0 of meer).
Heb ik dus de volgende SES URL:
index/nieuws/main/pagina/1
Dan zou deze vertaald moeten worden naar:
index.php?mod=nieuws&sub=main&pagina=1
Maar ik weet dus niet hoe je je "captured subpatterns" (dus $1, $2, $3 etc.) aan moet spreken met een patroon a la (/(.*)/(.*))*
Ik weet ook niet of dit uberhaupt mogelijk is. Ik heb al iets gezien van mapping-functionaliteit bij rewrite-rules, maar kan hier eerlijk gezegd weinig chocola van maken.
* 2. Omdat ik van de bovenstaande rewrite-rules gebruik maak (één RewriteRule voor elk aantal variabelen dat ik wens door te geven), ben ik beperkt tot 3 variabelen.
Het aantal te "vangen subpatronen" is namelijk volgens mij beperkt tot 10 (eigenlijk 9 - $0 bevat heel je patroon, en $1 tot en met $9 bevatten subpatronen). Voor de 4e variabele zou ik $9 en $10 (wat niet werkt) moeten gebruiken.
Is bovenstaande aanpak trouwens goed, of kan ik van minder $'s gebruik maken?
Ik heb zelf de volgende "oplossing" verzonnen:
Maak een RewriteRule die alle zooi na index/ in één $_GET-variabele gooit, dus als volgt:
RewriteRule index/(.*)$ /temp/index.php?stuff=$0 [L]
RewriteRule index/(.*)$ /temp/index.php?stuff=$0 [L]
En wat ik daarna doe is $_GET['stuff'] exploden op "/", en dat ik vervolgens $_GET opnieuw opbouw (wat natuurlijk ook kan).
Ik weet niet echt of deze laatste oplossing als "netjes" beschouwd kan worden, maar deze werkt verder prima, en heeft maar één rewrite-conditie nodig.
Iemand suggesties?
|