2011-10-12 10 views
5

estoy usando la siguiente regla de usar carpetas para diferentes versiones:módulo de reescritura para manejar carpetas versión sitio (franja barra)

RewriteEngine On 
RewriteRule .* - [E=VERSION:020] 
RewriteRule ^versions/(.*)$ versions/$1 [L] 
RewriteRule ^(.*)$ versions/%{ENV:VERSION}/$1 [L] 

que tengo una estructura como:

http://domain.com/versions/020/ 
http://domain.com/versions/020/th?=1 
http://domain.com/versions/020/myfolder/ 
http://domain.com/versions/020/myfile.html 

Pero el el usuario puede ver:

http://domain.com/ 
http://domain.com/th?=1 
http://domain.com/myfolder/ 
http://domain.com/myfile.html 

Tengo un último problema con una barra que muestra el número de versión.

Un segundo punto de entrada está (todavía funcionando):

http://domain.com/site/

Pero el problema cuando el usuario escriba el URL y omitir la barra diagonal final, así:

http://domain.com/site

El usuario ahora ve el número de versión como este:

http://domain.com/versions/020/site/

Esto es un problema ya que no quiero que el usuario descubra otras versiones.

¿Alguna idea de cómo puedo resolver el problema?

+0

Una excelente pregunta. – djhaskin987

Respuesta

1

Parece que esto está interfiriendo con mod_dir, que por defecto redirige el navegador cuando intentó acceder a un directorio y la barra inclinada final falta. Lo que está sucediendo es que la Reescritura está ocurriendo, cambiando /site a /versions/020/site, luego mod_dir está redireccionando el navegador a http://domain.com/versions/020/site/. Por lo tanto, el navegador ve las cosas de las versiones/020 en la barra de direcciones.

Puede desactivar la redirección automática de mod_dir con "DirectorySlash Off" directive. Pero es posible que desee agregar la barra final de todos modos mediante la inclusión de una redirección antes de que se produzca cualquier reescritura.

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ $1/ [R,L] 

Esto o algo equivalente antes de hacer la reescritura de /version/020 dónde se intenta repararlo.

Editar: En realidad, ahora que estoy pensando en ello, si reescribe/redirige cuando falta la barra inclinada, no necesita desactivar DirectorySlash porque siempre tendrá una barra al final llega a mod_dir. Tal vez lo haga de todos modos para estar a salvo?

Cuestiones relacionadas