2010-10-21 10 views
1

Voici un problème que je veux toujours résoudre avec htaccess. Je n'ai pas encore trouvé de solution, bien que cela semble possible - peut-être que quelqu'un peut aider.Utilisez htaccess pour masquer le nom du dossier

Disons que j'ai un dossier à la racine de mon site appelé /foo/. Je veux que les utilisateurs puissent accéder à ce dossier sur le chemin /bar/, mais pour diverses raisons, je ne peux pas renommer le dossier.

Afin de ne pas créer de la confusion que je veux qu'un seul chemin à voir jamais - c'est-à-dire, je ne suis pas veulent que les gens utilisent le nom /foo/ pour accéder au dossier; ils devraient toujours utiliser /bar/. Si quelqu'un va à example.com/foo/, leur navigateur devrait rediriger vers example.com/bar/ - mais le contenu devrait être le contenu de /foo/. Pour compliquer les choses, les pages /foo/ ont des dépendances (images, feuilles de style, liens vers d'autres pages, etc.) au sein du /foo/ qui sont codées en dur et ne peuvent pas être modifiées. Ceux-ci doivent, bien sûr, toujours fonctionner.

Donc, pour résumer, voici ce que je veux:

  • Les demandes de example.com/foo/ devraient rediriger vers example.com/bar/. Les demandes example.com/bar/ doivent renvoyer le contenu de example.com/foo/.

Est-ce possible? Il semble sur la surface comme si cela créerait une redirection infinie ... mais je suis sûr qu'il y a des façons d'éviter cela dans htaccess, n'est-ce pas?

Je serais très reconnaissant pour toute aide.

(PS - pour un peu de fond supplémentaire: La raison normale que je veux faire est de renommer le répertoire wordpress /wp-admin/ à quelque chose de plus professionnel et facile pour les clients de se rappeler, comme /admin/ Mais le même système devrait fonctionner. masquer tout chemin de cette manière)

Répondre

1

J'ai trouvé une sorte de solution - en utilisant un lien symbolique et htaccess en combinaison. J'ai d'abord créé un lien symbolique de /bar à /foo/.
Puis-je mettre cela en htaccess:

Options +FollowSymLinks 
RewriteRule ^foo/(.*)$ bar/$1 [R,L] 

Cela a exactement le résultat souhaité - example.com/bar/ montre le contenu du répertoire /foo/ et example.com/foo/ redirige vers example.com/bar/

Mais si quelqu'un peut venir avec un pur htaccess solution Je préférerais ça!


Mise à jour:

Ok, je l'ai enfin trouvé comment faire. Il se révèle être assez simple ...

RewriteCond %{THE_REQUEST} ^GET\ /foo/ 
RewriteRule ^foo/(.*)$ bar/$1 [R,L] 

RewriteRule ^bar/(.*)$ foo/$1 

Le seul problème est qu'il ne tient pas compte de RewriteBase, donc vous devez inclure le chemin complet dans la première ligne (après ^GET\).

+0

Avez-vous trouvé une solution? – Criesto

0

Si je comprends bien ce que vous voulez est quelque chose comme ceci dans votre fichier .htaccess.

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule ^foo/$ bar/ 
RewriteRule ^bar/$ foo/ 
</IfModule> 
Questions connexes