Comment utiliser la rewriterule de mod_rewrite d’apache sans changer les chemins relatifs

J’ai la règle de réécriture suivante dans .htaccess:

RewriteRule ^groups/([^/\.]+)/?$ groupdetail.php?gname=$1 [L,NC] 

Cela prend quelque chose comme www.example.com/groups/groupname et appelle www.example / groupdetail.php? Gname = groupname. Et ça marche très bien.

Mais tous les liens relatifs sur groupdetail.php utilisent des groupes / comme chemin relatif, et je ne le souhaite pas. Comment puis-je éviter cela?

Par exemple, lorsqu’un utilisateur clique sur un lien sur groupdetail.php? Gname = groupname, il accède à www.example / groups / https://stackoverflow.com/questions/144651/how-to-use-apaches-mod-rewrite-rewriterule-without-changing-relative-paths/link.php. Je veux amener l’utilisateur à www.example.com/https://stackoverflow.com/questions/144651/how-to-use-apaches-mod-rewrite-rewriterule-without-changing-relative-paths/link.php.

De toute évidence, je souhaite que l’URL de l’utilisateur ressemble à “www.example.com/groups/groupname”, donc je ne veux pas utiliser [R] / redirect.

Si, comme moi, vous aviez des centaines de liens relatifs dans la page, insérez un dans le avec un chemin absolu (pourrait utiliser relatif). Vous devez également définir le chemin d’access aux fichiers .js dans l’absolu car IE et Firefox traitent différemment la base href. Je suis d’accord que c’est un problème ennuyeux.

Les liens relatifs sont résolus par le navigateur, pas par le serveur, donc vous ne pouvez rien faire avec mod_rewrite.

Soit utiliser des liens relatifs, soit aller dans la hiérarchie ( ../https://stackoverflow.com/questions/144651/how-to-use-apaches-mod-rewrite-rewriterule-without-changing-relative-paths/link.php ) ou utiliser des liens absolus.

Si vous ne voulez pas avoir de liens absolus ou utiliser car vous allez déplacer la page, vous pouvez créer la base avec php, comme suit:

 echo ''; 

Si vous modifiez la règle rewite pour effectuer une redirection forcée (ajoutez l’option [R]), le navigateur utilisera l’URL /groupdetail.php et les liens relatifs fonctionneront correctement. Cependant, cela ajoute une redirection et rend les URL moins jolies.

 RewriteRule ^groups/([^/.]+)/?$ groupdetail.php?gname=$1 [L,NC,R] 

Vous pouvez utiliser la balise BASE si vous ne souhaitez pas utiliser de chemins absolus:

http://www.w3schools.com/tags/tag_base.asp

La réponse de Hop est correcte. Le navigateur considère l’adresse www.example.com/groups/groupname comme adresse, et considère donc que /groups est le répertoire en cours. Ainsi, tous les liens comme sont supposés être dans le dossier /groups .

Lorsque l’utilisateur déplace sa souris sur le lien, il voit www.example.com/groups/https://stackoverflow.com/questions/144651/how-to-use-apaches-mod-rewrite-rewriterule-without-changing-relative-paths/link.php comme adresse du lien.

La solution consiste à utiliser des liens absolus – ajoutez simplement une barre oblique avant le href:

L’utilisateur verra alors www.example.com/https://stackoverflow.com/questions/144651/how-to-use-apaches-mod-rewrite-rewriterule-without-changing-relative-paths/link.php comme URL.

Cela dit, il semble d’après votre question que vous utilisez volontairement des liens relatifs … avez-vous une raison de ne pas utiliser de liens absolus?