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:
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?