2009-08-12 35 views
21

Me pregunto si es posible utilizar .htaccess para volver a escribir el nombre de una carpeta. Lo que quiero decir es esto.reescriba un nombre de carpeta usando .htaccess

Digamos que tengo una URL como:

www.site.com/folder1/page.php 

Ahora quiero volver a escribir la url para (por ejemplo)

www.site.com/apple/page.php 

El carpeta1 es una carpeta existente en mi espacio web.

importante: ¡la "manzana" no es una carpeta sino un nombre!

autorización aquí es un plan paso a paso:

  1. tipos de usuario www.site.com/folder1/login.php
  2. La url debe reescribir y no redirigir la url para www.site.com/apple/login.php

Esto significa que apple es sólo una nombre y no un directorio Todo el código debería provenir de la carpeta1. Acutally apple debería ser solo un alias para folder1. No puedo simplemente cambiar el nombre de folder1 a Apple. Por lo tanto, simplemente volvería a escribir folder1 en apple.

+0

hace la carpeta de manzana existe en su espacio web también? – Josh

+0

¡No, es solo un nombre! – sanders

+0

siento que necesita estar más claro de lo que quiere que suceda. ¿Puede darnos paso a paso lo que quiere que suceda, por ejemplo, qué URL escribe el usuario y dónde se encuentra el archivo en su espacio web? – Josh

Respuesta

33

mod_rewrite solo puede reescribir/redirigir los URI solicitados. Por lo tanto, deberá solicitar /apple/… para obtener que se reescriba en el correspondiente /folder1/….

Prueba esto:

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

Esta regla se volverá a escribir cada petición que se inicia con la ruta URI /apple/… internamente para /folder1/….


Editar Como en realidad se está buscando al revés:

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

Esta regla está diseñada para trabajar en conjunto con la otra regla anterior. Las solicitudes de /folder1/… se redirigirán externamente al /apple/… y las solicitudes de /apple/… se reescribirán internamente de nuevo en /folder1/….

+0

Ah, Gumbo, creo que tienes razón. Entendí mal lo que significaba el cartel original, se describe al revés. +1 – zombat

+0

@zombat: Como siempre;) – Gumbo

+0

Intenté esto con http://site.com/folder1/login.php pero no reescribe a http://site.com/apple/login.php – sanders

5

intento:

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

Cuando la carpeta que desea que aparezca en la url está en la primera parte de la declaración - esto es lo que va a coincidir en contra y la segunda parte 'reescribe' a su existente carpeta. la bandera [NC] significa que ignorará las diferencias entre mayúsculas y minúsculas, por ejemplo, Apple/se reenviará.

ver aquí para un tutorial: http://www.sitepoint.com/article/guide-url-rewriting/

También hay una utilidad de prueba agradable para ventanas se puede descargar desde aquí: http://www.helicontech.com/download/rxtest.zip para notar para el probador que necesita para dejar de lado el nombre de dominio - por lo la prueba estaría en contra de /folder1/login.php

de redirección desde/a carpeta1/manzana intente esto:

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

para reorientar y vuelva a grabar simplemente combinar lo anterior en el archivo .htaccess:

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

gracias por su ayuda, pero cuando lo pruebo en esto: Intenté esto con site.com/folder1/login.php pero no reescribe en site.com/apple/login.php obtengo patrones no mach – sanders

+0

@Josh : su edición RewriteRule ^/folder1 (. *)? $/apple1 $ 1 [R] no funciona eiter. – sanders

+0

¿Son estos redireccionamientos más lentos? cuando ocurre la redirección, en comparación con una versión que no se redirecciona? – Miguel

Cuestiones relacionadas