web-dev-qa-db-fra.com

Comment puis-je transmettre des paramètres d'URL facultatifs via ma règle de réécriture?

J'ai créé un CMS qui identifie si la valeur GET de url est définie. Si c'est le cas, elle renvoie le contenu HTML de la page à partir du modèle frontal sur index.php. Il s’agit idéalement de créer un système de templates que les personnes qui ne connaissent pas beaucoup PHP puissent utiliser, tout en pouvant les développer s’ils connaissent PHP.

Tout a bien fonctionné avec ce htaccess. Le htaccess suivant convertit http://localhost/index.php?url=(page) en http://localhost/(page).

RewriteEngine On

RewriteRule ^(|/)$ index.php?url=$1
RewriteRule ^([a-zA-Z0-9_-]+)(|/)$ index.php?url=$1

Cependant, j'ai développé le CMS pour identifier si l'URL GET end est définie. Si sa valeur est backend et que la valeur de $_GET['url'] n'est pas définie, cela suppose que la valeur est index. Si la valeur est définie, il utilise la valeur pour extraire ce fichier. Je veux maintenant que mon htaccess fasse ce qui suit:

  1. Si le premier paramètre est backend, indiquez l'URL de http://localhost/index.php?end=backend&url=manage-pages à http://localhost/backend/manage-pages.

  2. Si c'est autre chose que backend, convertissez-le de http://localhost/index.php?url=(page) en http://localhost/(page).

1
Intact Dev

Vous devez utiliser le indicateur QSA sur votre règle de réécriture. Il conserve toute chaîne de requête de l'URL d'origine et l'ajoute à la nouvelle URL. Votre règle de réécriture serait:

RewriteRule ^(|/)$ index.php?url=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)(|/)$ index.php?url=$1 [QSA]
1