Comment utiliser le mod_rewrite d'apache rewriterule sans changer les chemins d'accès relatifs
J'ai la règle de réécriture suivante .htaccess:
RewriteRule ^groups/([^/\.]+)/?$ groupdetail.php?gname=$1 [L,NC]
Cela prend quelque chose comme www.example.com/groups/groupname et les appels www.example/groupdetail.php?gname=groupname. Et il fonctionne très bien.
Mais tous les liens sur groupdetail.php utiliser des groupes/que le chemin d'accès relatif, et je ne veux pas qu'ils. Comment puis-je éviter cela?
Par exemple, lorsqu'un utilisateur clique sur un lien <a href="link.php">
sur groupdetail.le php?gname=groupname, il a pris à www.example/groups/link.php. Je veux prendre l'utilisateur pour www.example.com/link.php.
Évidemment, je veux URL à l'utilisateur de regarder comme "www.example.com/groups/groupname" donc, je ne veux pas utiliser les [R]/redirect.
OriginalL'auteur | 2008-09-27
Vous devez vous connecter pour publier un commentaire.
Si comme moi vous avez eu des centaines de liens relatifs dans la page, insérer un
<base href="">
dans le<head>
avec un chemin absolu (peut-utilisation relative de trop). Vous devrez également faire le chemin .fichiers js dans le<head>
absolue parce que IE et firefox traiter avec la base href différemment. Je suis d'accord c'est une source de problème.OriginalL'auteur
Les liens relatifs sont résolus par le navigateur, pas le serveur, donc il n'y a rien que vous pouvez faire avec mod_rewrite.
Soit utiliser des liens relatifs à l'aller en haut de la hiérarchie (
../link.php
) ou utiliser des liens absolus.hop, je suis d'accord que votre commentaire ne mérite l'-4 il obtenu, que je vous ai donné un upvote.
des choses étranges se produisent à cette réponse... maintenant, c'est tout d'un coup -1 à nouveau à partir de seulement un upvote? ...de toute façon, peut-être que je me trompe, mais si oui, je voudrais savoir pourquoi!
5 ans réponse, et pourtant, cela clarifie beaucoup de choses pour moi: "les liens relatifs sont résolus par le navigateur". Je m'en doutais mais n'a pas vu écrit nulle part. Merci!!!!
OriginalL'auteur
Si vous ne voulez pas avoir des liens absolus ou de l'utilisation
<base>
parce que vous allez déplacer la page autour de vous, vous pouvez avoir la base être généré par php, comme suit:OriginalL'auteur Robin
Si vous modifiez le rewite règle pour faire un la force de redirection (ajouter le [R] de l'option), le navigateur va utiliser l' /groupdetail.php URL et les liens fonctionnent bien. Toutefois, cela ajoute une redirection et rend l'Url de moins jolie.
OriginalL'auteur Kevin Hakanson
Vous pouvez utiliser la BASE de tag, si vous ne voulez pas utiliser des chemins absolus:
http://www.w3schools.com/tags/tag_base.asp
OriginalL'auteur Razvan
Hop la réponse est correcte. Le navigateur voit
www.example.com/groups/groupname
comme l'adresse, il estime que/groups
est le répertoire courant. Donc, tous les liens comme<a href=link.php>
sont supposés être dans le/groups
dossier.Lorsque l'utilisateur déplace sa souris sur le lien, il va voir
www.example.com/groups/link.php
que l'adresse du lien.La solution est d'utiliser des liens absolus -- il suffit d'ajouter une barre oblique avant le href:
<a href=/link.php>
L'utilisateur sera alors voir
www.example.com/link.php
que l'url.Cela dit, il semble de votre question que vous êtes en utilisant les liens relatifs sur le but... avez-vous une raison de ne pas utiliser des liens absolus?
OriginalL'auteur Andrew Swift