entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

¿Es posible ocultar parte de la url en el navegador?

Hola a todos,

Mi pregunta es: se puede ocultar parte de la url en el navegador? por ejemplo:

Poseo la siguiente estructura de directorios

<a href="http://www.subirimagenes.net/i/150227040403235655.png" target="_blank" title="subir imagenes"><img src="http://sia1.subirimagenes.net/img/2015/02/27//150227040403235655.png" border="0" alt="subir imagen"></a>
Si no es posible acceder a la imgen dar click aquí

así que cuando un usuario accede a: www.miejemplo.com será redirigido a www.miejemplo.com/app/view/inicio pero quisiera que en el navegador del usuario no mostrara todos los directorios, bastaría con mostrar: www.miejemplo.com/inicio, es esto de alguna forma posible? Estoy usando PHP, JQuery, HTML, CSS para el ejemplo del sitio.

Muchas gracias por su colaboración :)

1 Respuesta

4votos

white Puntos75880

Hola @admont28, es posible si usas apache y mod_rewrite agregando un fichero .htaccess a la raiz de tu sitio y haciendo uso de rewriteRule

.htaccess:

RewriteEngine on

RewriteRule ^app/view/(inicio|login)/?$ "/$1" [L,R=301]
RewriteRule ^(inicio|login)/?$ "/app/view/$1/index.php" [NC,L]

0voto

admont28 comentado

Gracias @white

Me podrías explicar, si no es mucha molestia, que hace cada una de las líneas que me escribiste.

1voto

white comentado

Por supuesto,

Apache cuenta con un modulo llamado mod_rewrite, este nos sirve para reescribir las url basado en expresiones regulares, varios servidores cuentan con apache asi que es muy utilizado.

RewriteEngine on: activamos el modulo mod_rewrite

RewriteRule ^app/view/(inicio|login)/?$ "/$1" [L,R=301]:

acá reescribimos una url, si la url de tu pagina empieza por 'app/view/':
^app/view/.
y contiene despues inicio o login:
(inicio|login)
seguido de un slash opcional
/?

entonces lo redirigimos al elemento capturado en la expresion regular, login o inicio
En una expresion regular lo que este entre parentesis se captura. entonces aca solo hay una captura "$1"

[L,R=301]

L => la ultima regla en ejecutarse.
R=301 => significa que el servidor retorna 301 moved permanently y redirige.

en la otra regla es lo mismo solo que cambian los flags [NC, L]:

NC => insensible a mayusculas es decir que tanto inicio como InIcIo son validos para la regla.

saludos!

PD: links de interes

http://www.desarrolloweb.com/manuales/expresiones-regulares.html
https://siliconhosting.com/kb/questions/6/Utilizar+las+rewrite+rules+en+.htaccess
http://httpd.apache.org/docs/2.4/rewrite/flags.html

0voto

admont28 comentado

Entonces si por ejemplo tengo los siguientes archivos php:

  • inicio.php
  • empresa.php
  • servicios.php
  • proyectos.php
  • contacto.php

Tendría que tener 2 reglas por cada archivo?
se podría hacer una expresión que sirva para todos los archivos?, es decir, que siempre se oculte /app/view

1voto

white comentado

con esta regla bastaría:

RewriteEngine on
RewriteBase /

RewriteRule ^(inicio|empresa|servicios|proyectos|contacto)/?$ "/app/view/$1.php" [NC,L]

agregas todos en el parentesis o usas una expresion regular:
RewriteRule ^([a-zA-Z0-9]+)/?$ "/app/view/$1.php" [NC,L]

esta tomaria todo archivo con nombre que contenga a-z A-Z 0-9 y con extension .php.

entonces las url: http://tusitio.com/inicio o http://tusitio.com/empresa, etc te redirigirian internamente a /app/view/[archivo].php

saludos!

0voto

x4mp73r comentado

... y ¿en caso de esconder la extension?, es decir, www.misitio.com/inicio.html, como se aplicaria en caso de quitar la extension .html Saludos!

0voto

admont28 comentado

Intenta para ocultar la extensión con el siguiente código en el .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f

# ocultar las extensiones de archivos .php
RewriteRule ^(.*)$ $1.php

0voto

white comentado

Hola @x4mp73r, tu pregunta debería estar en un nuevo tema,

la regla podría ser:

RewriteRule ^(inicio)$ "/$1.html" [NC,L]

0voto

admont28 comentado

Hola @white, he ensayado tu código y no me funciona, escribí

RewriteEngine on
RewriteBase /

RewriteRule ^(index|login|estudiante|docente|contacto|administrador)/?$ "/app/view/$1.php" [NC,L]

Pero no me esconde la parte de la url que necesito esconder.

Gracias.

0voto

white comentado

Lo acabo de probar y me funciona normalmente, estas seguro que tienes el modulo rewrite activado en apache? intentaste acceder a http://tupagina.com/contacto y ver si existe el fichero: app/view/contacto.php?

0voto

admont28 comentado

Lo estoy probando en el hosting,

Escribí a soporte y me dijeron que el módulo se encuentra activo; si es posible acceder a http://mipagina.com/contacto y efectivamente me carga el fichero, pero en la url se modifica y se muestra como http://mipagina.com/app/view/contacto y esto es lo que específicamente quiero ocultar.

---------------- Actualización ----------------
Creo que de momento me ha funcionado, pero al navegar por los distintos enlaces del sitio se modifica de nuevo la url, cómo debo manejar los enlaces en mi sitio de forma relativa y que se conserve el hecho de ocultar el app/view de la url?

Gracias

0voto

white comentado

debes modificar los enlaces de tu sitio manualmente y cambiar /app/view/contacto por /contacto, o si deseas algo automatico puedes modificar el buffer y reemplazar todas las urls.

http://entredesarrolladores.com/6551/c%C3%B3mo-crear-una-url-amigable-desde-htaccess?show=6567#a6567
http://www.edroesch.com/2012/04/php-rewrite-urls-using-output-buffer/

0voto

admont28 comentado

Muchísimas graicas @white si que me ha servido tu recomendación, y en cuanto a eso me surge una duda, si de ese modo (/contacto, /docente, /administrador) accedo a los ficheros que se encuentran en /app/view/, de que modo relativamante accedo a los ficheros que se encuentran en /app/controller/, tal vez con un "../controller/" ?

De nuevo muchas gracias :)

0voto

white comentado

te refieres a acceder desde el navegador al controlador? o a incluir en un fichero .php un controlador?

para incluirlo desde el fichero /app/view/vista.php bastaría con: include('../controller/controlador.php');

si lo que deseas es acceder desde el navegador podria ser /app/controller/controlador.php, recuerda que mod_rewrite no actua sobre el directorio de tus ficheros sino con las urls.

1voto

admont28 comentado

De nuevo mil gracias @white, he logrado realizar lo que quería, eres un excelente colaborador, conoces bastante!

Creo que es hora de cerrar el tema para no alargar la conversación, y que otra persona pueda encontrar la solución fácilmente.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta