Mod_rewrite RewriteRule et liens HTML

Je crée un nouveau site Web et il contient du php. Le site fonctionne essentiellement comme ceci, j’ai /index.php?page=category_page. La catégorie serait la catégorie et la page serait le genre de sous-catégorie / page réelle. La règle réécrite ressemblerait à ceci: / category / page.

J’ai ça:

RewriteEngine On RewriteRule ^category/([^/]*)$ index.php?page=$1 [L] 

Mais je ne sais pas comment séparer la catégorie et la page, aucune aide? La deuxième chose est que, dans mon index.php (par exemple), j’ai un css d’un fichier externe:

  

Cela ne fonctionne pas avec la règle de réécriture, car il essaie de charger /category/page/style/style.css qui n’existe pas / ne réécrit pas. Comment puis-je le faire fonctionner? Je sais qu’un simple correctif serait de mettre /style/style.css et celui qui serait chargé depuis la racine du site, mais je suis en train d’exécuter le site Web à partir d’un sous-répertoire, par exemple example.com/new/index.php. n’est pas une option. Une aide avec ça?

Problème 1:

Vous pouvez définir plusieurs parameters dans votre regex, par exemple la catégorie et la page (voir ci-dessous).

Avec une telle règle de réécriture large, vous souhaiterez toutefois append une condition pour ne pas réécrire les feuilles de style, les images et les autres éléments.

J’ai également modifié votre modèle pour ne faire correspondre que des lettres, des chiffres, des tirets et des traits de soulignement, ce qui empêcherait l’utilisation de caractères non standard dans vos noms de catégorie ou de page.

 RewriteEngine On RewriteCond %{REQUEST_URI} !\.(js|css|png|gif|jpg)$ [NC] RewriteRule ^([\w\d\-]+)/([\w\d\-]+)/?$ index.php?category=$1&page=$2 [L] 

Problème 2:

Vous utilisez une URL relative dans votre href, qui ajoute l’emplacement de la feuille de style à l’emplacement actuel défini dans votre navigateur (/ category / page /).

Même si le côté serveur est en train de réécrire cette URL, le navigateur ignore la réécriture.

Si vous utilisez plutôt une URL absolue, votre navigateur définira l’URL par rapport à l’URL BASE (/).

Essaye ça:

  

Utilisez cette règle de réécriture

 RewriteEngine On RewriteRule ^(.+)/(.+)/$ index.php?page=$1_$2 [L]