2010-10-10 5 views
0

J'essaye d'installer un petit cadre de modèle de disposition dans php - et tout se passe bien sauf une chose - réécriture d'url. Je suce à regexp, et je suce encore pire à mod_rewrite. Et je suis pressé de sortir ce truc, alors peux-tu m'aider?RewriteRule gentillesse

J'ai besoin d'un fichier .htaccess qui a seulement deux règles

  1. Chaque demande qui se termine par .png/.jpg/.gif/js/Css gérer comme il est. (Par exemple: http://mysite.com/img/image.png>http://mysite.com/img/image.png)

  2. Tout rewrite autre manière suivante:

    http://mysite.com/foo/bar/44>http://mysite.com/public/index.php?1=foo&2=bar&3=44 http://mysite.com/>http://mysite.com/public/index.php

Beaucoup de gens grâce! Si vous le souhaitez, je vais mettre vos crédits sur des choses, puis je vais partager en tant que substance opensource.

Répondre

1

Essayez ces règles:

RewriteRule .*\.(png|jpg|js|css)$ - [L] 
RewriteRule !^/public/index\.php$ /public/index.php [L] 

Si vous souhaitez utiliser ces règles dans un fichier .htaccess, supprimer le préfixe de chemin contextuel du motif et de substitution.

Notez que la deuxième règle ne réécrit pas la requête pour interroger les paramètres car vous ne pouvez pas compter avec mod_rewrite (ou cela serait au moins très difficile).

Mais vous pouvez utiliser une syntaxe qui est interprété comme un tableau en PHP (name[]=value):

RewriteRule ^/public/index\.php$ - [L] 
RewriteRule ^((/[^/]+)+)/([^/]+)$ $1?params[]=$3 [N,QSA] 
RewriteRule ^/([^/]+)$ /public/index.php?params[]=$1 [L,QSA] 

Cela permet un certain nombre de segments de chemin.

Mais je recommande plutôt ma première suggestion et faire le chemin avec l'analyse syntaxique PHP:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$segments = array_filter(explode('/', $_SERVER['REQUEST_URI_PATH']), 'strlen'); 
+0

Je viens juste allé poster ma solution monoxyle, et je vis cela. Je posterai ma solution quelque peu incomplète et j'accepterai la vôtre comme légitime. – Popara

+0

RewriteCond% {REQUEST_FILENAME}! -f \t RewriteRule^(. *) $ Public/index.php [QSA, L] – Popara