Foros del Web » Administración de Sistemas » Apache »

Archivo PHP con el mismo nombre que un directorio

Estas en el tema de Archivo PHP con el mismo nombre que un directorio en el foro de Apache en Foros del Web. Hola gente, ¿cómo están? Hace tiempo que tengo una duda y no he podido resolverla, a pesar de que busqué en Google y aquí en ...
  #1 (permalink)  
Antiguo 28/07/2012, 20:15
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 16 años, 4 meses
Puntos: 26
Archivo PHP con el mismo nombre que un directorio

Hola gente, ¿cómo están?

Hace tiempo que tengo una duda y no he podido resolverla, a pesar de que busqué en Google y aquí en el foro. Supongamos que tengo un .htaccess así:
Código:
<IfModule mod_rewrite.c> 
	RewriteEngine on
	RewriteBase /sitio
	RewriteCond %{SCRIPT_FILENAME} !-d
	RewriteCond %{SCRIPT_FILENAME} !-f
	
	RewriteRule ^(\w+)$ index.php?sec=$1 [L]
</IfModule>
Y tengo un hipervínculo así <a href="descargas">Descargas</a>. Apache me redireccionaría a index.php?sec=descargas abriendo la sección que corresponde. Hasta ahí todo bien, ¿pero qué pasa si tengo un directorio que se también se llama "descargas"? Apache le dará "prioridad" a ese directorio y accederá a él, y yo quiero que lo ignore y simplemente respete la regla que hay en el .htaccess. ¿Existe alguna forma de resolver esto? Yo pensé que las líneas:
Código:
	RewriteCond %{SCRIPT_FILENAME} !-d
	RewriteCond %{SCRIPT_FILENAME} !-f
Tenían algo que ver con eso, pero parece que no, y me gustaría que alguien me aclare bien qué utilidad tienen, ya que las he visto en muchos ejemplos de URLs amigables.
Desde ya, gracias. Un saludo.
  #2 (permalink)  
Antiguo 28/07/2012, 22:05
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Archivo PHP con el mismo nombre que un directorio

Código Apache:
Ver original
  1. RewriteCond %{SCRIPT_FILENAME} !-d
  2.     RewriteCond %{SCRIPT_FILENAME} !-f
justamente sirven para eso, son condiciones para prevenir que se cumpla la regla si existiesen archivos o carpetas del mismo nombre.
Podes invertir la condición, quitando el signo de negación !, pero te encontrarías con que si no existiesen carpetas iguales a la url, no se cumpliría la regla
Es decir, si tu link es
<a href="descargas">Descargas</a>.
solo iría al index si existe carpeta "descargas", pero quiero creer que si en tu htaccess estas usando algún tipo de comodin (\w+), también tenés
<a href="otracosa">otracosa</a>.
<a href="algomas">algomas</a>.
Y obviamente no tiene mucho sentido andar creando carpetas vacias con esos nombres para que se cumpla la regla
mod_rewrite debe de acompañar en la lógica a la estructura que crees, si no pierde funcionalidad. O no se crea la carpeta descargas, ó no se utiliza el href descargas, o se crea una expresión que contenga descargas como un prefijo ó sufijo de la misma (o alguna variante que te permita diferenciar una cosa de la otra
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 28/07/2012 a las 22:13
  #3 (permalink)  
Antiguo 28/07/2012, 23:50
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 16 años, 4 meses
Puntos: 26
Respuesta: Archivo PHP con el mismo nombre que un directorio

Muchas gracias por tu respuesta, emprear.

Por lo que me explicás entiendo que no hay forma de tener al mismo tiempo la carpeta "descargas" y poder hacer una URL así: http://www.ejemplo.com/descargas que me cargue index.php?sec=descargas. Lo que hacía hasta ahora era usar un nombre distinto para la carpeta, como "downloads".

Lo que yo busco es armar URLs amigables con una barra, algo así: http://www.ejemplo.com/descargas/utilidades

Si hago algo así no me funciona, también probé escapando la barra pero sigo con el mismo problema, el servidor busca el directorio y accede al mismo. Todas las secciones tienen su correspondiente directorio con archivos PHP dentro que son las sub-secciones.
Código:
RewriteRule ^(\w+)/(\w+)$ index.php?sec=$1&sub=$2 [L]
Me gustaría poder tener las carpetas con el mismo nombre que uso en la variable $_GET['sec'] y no tener que usar nombres distintos.

Un saludo.
  #4 (permalink)  
Antiguo 29/07/2012, 09:33
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Archivo PHP con el mismo nombre que un directorio

@RabidFish

No está muy claro lo que estás haciendo.
vos querés armar esto
http://www.ejemplo.com/descargas/utilidades
pregunto, "descargas", es una categoría? ó las categorías serían
http://www.ejemplo.com/descargas/utilidades
http://www.ejemplo.com/descargas/documentos
http://www.ejemplo.com/descargas/musica
las que están en negritas
Tu index.php consulta una base de datos? o solo construye la ruta al archivo que se quiere bajar.
Fijate que en tu primer ejemplo usabas solo "sec" como parámetro en la url, ahora tenés "sec" y "sub"
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 29/07/2012, 13:00
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 16 años, 4 meses
Puntos: 26
Respuesta: Archivo PHP con el mismo nombre que un directorio

Espero poder explicarme mejor esta vez, me voy a ayudar con una imagen:


ejemplo es el directorio base del sitio. Ahí está el index.php que recibiría por GET la sección y/o sub-sección para hacer un require_once del archivo PHP correspondiente. Por ejemplo, si yo quiero ir a la sub-sección utilidades, debería hacer esto:
http://www.ejemplo.com/index.php?sec=descargas&sub=utilidades

Y eso incluiría al archivo C:\wamp\www\ejemplo\descargas\utilidades.php

Y me gustaría hacerlo con URLs amigables así:
http://www.ejemplo.com/descargas/utilidades

El problema es que tengo directorios con el mismo nombre que las secciones y sub-secciones, ya que así mantengo organizados los archivos. Por ejemplo, en descargas/utilidades guardaría los archivos para descargar las utilidades, que se ven con el ícono de WinRAR en la imagen.

No hago consutlas a la base de datos para cargar esas secciones, sólo armo la ruta del archivo a cargar a partir de las variables GET.

Un saludo.

Última edición por RabidFish; 29/07/2012 a las 13:07
  #6 (permalink)  
Antiguo 29/07/2012, 17:12
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Archivo PHP con el mismo nombre que un directorio

A ver.

Código Apache:
Ver original
  1. Options +FollowSymLinks -Indexes
  2. RewriteEngine on
  3. RewriteRule ^descarga/(.*)$ /index2.php?sub=$1 [L]
para simplificar, me ahorré lo del base y asumo que todo parte desde la raíz no de la carpeta "ejemplo", y puse index2.php para no añterar mi propio index en las pruebas. Como se observa, no usé "descargas" como prefijo, sino "descarga", lo podés invertir si querés

nuestro index2.php
Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>titulo php</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. </head>
  7. <body>
  8. <p>
  9. <a href="/descarga/fuentes">fuentes</a> |
  10. <a href="/descarga/utilidades">utilidades</a> |
  11. <a href="/descarga/mp3">mp3</a>
  12. </p>
  13. <?php
  14. if(isset($_GET['sub'])){
  15. if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/descargas/' .  $_GET['sub'] . '.php')){
  16. include_once('descargas/' . $_GET['sub'] . '.php');
  17. }else{
  18. echo "no existe";
  19. }
  20.  
  21. }else{
  22. echo "no existee";
  23. }
  24. ?>
  25. </body>
  26. </html>

los mensajes de no existe (mp3 en el ejemplo, pensá que alguien quiera manipular la url desde la barra de direcciones) se personalizan ó incluso que haga include a otro archivo x defecto. Es decir tus links se construyen con
<a href="/descarga/fuentes">fuentes</a>
no con descargas.
como descargas, según la estructura que mostraste es comun a todas las subs, no hace falta pasarla en la query como parámetro

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 29/07/2012, 19:15
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 16 años, 4 meses
Puntos: 26
Respuesta: Archivo PHP con el mismo nombre que un directorio

Gracias por la ayuda emprear, ese código ya lo tenía hecho y me funciona bien. El problema radicaba en que yo tengo directorios con los mismos nombres que paso por GET, entonces el servidor "se mete" en dichos directorios y busca el index.php dentro de ellos (por ejemplo, me lleva a http://www.ejemplo.com/descargas/?se...sub=utilidades), cuando lo que yo quería era que ignore los directorios existentes y simplemente incluya el archivo PHP desde el index.php en el directorio base. Supongo que voy a usar nombres diferentes en los nombre de los directorios y las variables GET, aunque creo que también me funciona si meto el directorio "descargas" en una carpeta (por ejemplo "secciones") y uso rutas absolutas en los enlaces. Muchas gracias.

Un saludo.

Última edición por RabidFish; 29/07/2012 a las 19:24

Etiquetas: directorio, htaccess, nombre, php, rewrite, url, amigables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:13.