2009-08-12 8 views
21

Je me demande s'il est possible d'utiliser .htaccess pour réécrire un nom de dossier. Ce que je veux dire est ceci.réécrire un nom de dossier en utilisant .htaccess

Disons que j'ai une URL comme:

www.site.com/folder1/page.php 

Maintenant, je veux réécrire l'URL (par exemple)

www.site.com/apple/page.php 

Le folder1 est un dossier existant sur mon espace web.

important: la "pomme" n'est pas un dossier plutôt qu'un nom!

Ok ici est un plan étape par étape:

  1. types d'utilisateurs www.site.com/folder1/login.php
  2. L'URL doit réécrire et non rediriger l'URL vers www.site.com/apple/login.php

Cela signifie que apple est juste nom et pas un répertoire. Tout le code devrait venir de folder1. Acutally apple devrait juste être un alias pour folder1. Je ne peux pas simplement renommer folder1 en Apple. Par conséquent, je voudrais juste réécrire folder1 à apple. Mod_rewrite ne peut réécrire/rediriger que les URI demandées.

+0

fait le dossier de pomme existe sur votre espace web aussi? – Josh

+0

Non c'est juste un nom !!!! – sanders

+0

désolé, vous devez être plus clair ce que vous voulez arriver. pouvez-vous nous donner une étape par étape ce que vous voulez arriver, par exemple ce que l'utilisateur tape et où le fichier est dans votre espace web. – Josh

Répondre

33

Donc, vous devrez demander /apple/… pour le réécrire à un /folder1/… correspondant.

Essayez ceci:

RewriteEngine on 
RewriteRule ^apple/(.*) folder1/$1 

Cette règle réécrira toute demande qui commence par le chemin URI /apple/… interne /folder1/….


Modifier Comme vous cherchez réellement pour l'inverse:

RewriteCond %{THE_REQUEST} ^GET\ /folder1/ 
RewriteRule ^folder1/(.*) /apple/$1 [L,R=301] 

Cette règle est conçue pour travailler de concert avec l'autre règle ci-dessus. Les demandes de /folder1/… seront redirigées vers l'extérieur à /apple/… et les demandes de /apple/… seront ensuite réécrites en interne à /folder1/….

+0

Ah, Gumbo Je pense que tu as raison. J'ai mal compris ce que l'affiche originale signifiait, elle est décrite en arrière. +1 – zombat

+0

@zombat: Comme toujours;) – Gumbo

+0

J'ai essayé ceci avec http://site.com/folder1/login.php mais il ne réécrit pas à http://site.com/apple/login.php – sanders

5

essayer:

RewriteRule ^/apple(.*)?$ /folder1$1 [NC] 

Lorsque le dossier que vous souhaitez apparaître dans l'URL est dans la première partie de la déclaration - c'est ce qu'il correspondra à contre et la deuxième partie « réécritures » à votre existante dossier. le drapeau [NC] signifie qu'il ignorera les différences de cas, par exemple Apple/sera toujours en avant.

Voir ici pour un tutoriel: http://www.sitepoint.com/article/guide-url-rewriting/

Il y a aussi un utilitaire de test agréable pour les fenêtres que vous pouvez télécharger ici: http://www.helicontech.com/download/rxtest.zip Juste à noter pour le testeur, vous devez laisser le nom de domaine - afin le test serait contre /folder1/login.php

à Dévier à partir de/à folder1/pomme essayer:

RewriteRule ^/folder1(.*)?$ /apple$1 [R] 

à redirigent puis ré-écriture juste combiner ci-dessus dans le fichier htaccess:

RewriteRule ^/folder1(.*)?$ /apple$1 [R] 
RewriteRule ^/apple(.*)?$ /folder1$1 [NC] 
+0

merci pour votre aide, mais quand je l'ai testé sur ce: J'ai essayé ceci avec site.com/folder1/login.php mais il ne réécrit pas à site.com/apple/login.php Je reçois des motifs pas mach – sanders

+0

@Josh : votre edit RewriteRule ^/dossier1 (. *)? $/apple1 $ 1 [R] ne fonctionne pas. – sanders

+0

Les redirections sont-elles plus lentes? quand la redirection se produit, en comparant à une version non redirigée? – Miguel

Questions connexes