Permitir a una url accedes a mi web a traves de htaccess

Iniciado por Hekaly, 2 Julio 2014, 18:16 PM

0 Miembros y 1 Visitante están viendo este tema.

Hekaly

Buenas.

Tengo una sección de una web que quiero mostrar solo si se accede desde otra web.

Os pongo un ejemplo.

mi web es www.dominio.com y quiero que si accedes desde www.dominio2.com a www.dominio.com/carpeta puedas verlo, pero que desde cualquier otra web no se pueda el caso es que he conseguido hacerlo pero no a nivel de esa ruta exacta sino de toda la web.


SetEnvIfNoCase Referer "^http://dominio2.com" url_ref=1

<FilesMatch "(.*)">
      Order Deny,Allow
      Deny from all
      Allow from env=url_ref
</FilesMatch>


Con esto consigo que solo la web dominio2.com acceda a www.dominio.com/carpeta, y el resto no, incluido la direccion raiz (www.dominio.com)

Lo que quiero es que solo pueda ser visitado dominio2 la carpeta que le digo y como la web que tengo es un wordpress no tengo una con ese nombre si no que es un RewriteRule.

Como podria hacer eso?? Tambien eh probado a porner la ruta en <FilesMatch "http://dominio.com

MinusFour

¿Hay alguna razón por la cual quieras hacer esto? Te puedes saltar la condición si modificas la cabezera http para poner el referer correcto.

Hekaly

Lo que me han pedido es que solo  desde x dominio pueda acceder a dominio.com/carpeta pero a dominio.com pueda acceder todo el mundo.

Como se que puedes bloquear o permitir por ip o referer he puesto lo que he publicado, pero claro, deniego o permito toda la web , ya que es wordpress no tengo dominio.com/carpeta como tal (asi que <Directory /var/log...) no puedo usarlo (o eso creo).

Aun asi, no puedo tocar el codigo de la web (cabeceras) por que eso es para el departamento de desarrollo y yo estoy en otro.

Por eso me he ido al htaccess. No se podria hacer con el?

Muchas gracias.

MinusFour

A ver pues, ¿el .htaccess donde lo tienes?

¿En el root o en la carpeta que quieres proteger?

Si te entendi...

De Dominio1.com puede acceder Dominio2.com/carpeta
Nadie puede acceder a Dominio2.com/carpeta
Todos pueden acceder al root de Dominio1.com

el-brujo

SetEnvIfNoCase Referer "^http://dominio2.com" url_ref=1

<Directory "/home/httpdocs">
<FilesMatch "(.*)">
      Order Deny,Allow
      Deny from all
      Allow from env=url_ref
</FilesMatch>
</Directory>


Supongo que con la directiva  <Directory no te funciona porque estás usando reglas del mod_rewrite, pero con una expresión regular debería funcionar:

<FilesMatch "carpeta$">

CitarFilesMatch matches physical filesystem objects.

entonces:

<LocationMatch "carpeta$">

También se podría hacer con el el mod_rewrite usando expresiones regulares:


RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://www\.example\.com [NC]
RewriteRule \.png http://www.somewhere.com/something.gif [R]



Usando el RewriteCond junto con !-d (cuando sea directorio)

Hekaly

MinusFour.

En realidad no existe la carpeta ya que dominio1.com/carpeta es generado con una regriteRule de htaccess de una ruta de wordpress. Por eso no me ha funcinoado (eso ycreo yo) <Directory> <Location><Proxy> etc

Si, el htaccess esta en la raiz del proyecto web (/var/www/carpeta)
Si, todo el mundo puede acceder a dominio1.com , pero si accedes (por ejemplo con un href) a dominio1.com/carpeta solo podra acceder el que ya quiera (dominio2.com).

el-brujo --> Mañana cuando llegue al pc, lo pruebo y os cuento.


Muchas gracias a los dos, un saludo.


Hekaly

Nada, no me sale ni con vuestra ayuda, debe estar haciendo algo mal.

Una duda que seguramente me ayudara a resolverlo.

Como se aplica a una ruta url sin que exista realmente esa carpeta. Es decir, como se aplica domonio.com/micarpeta sin que exista /var/www/htdocs/dominio/micarpeta.

Gracias.

MinusFour

Pues LocationMatch debería hacer justo eso:

Código (apache) [Seleccionar]

SetEnvIfNoCase Referer "^http://dominio2.com" url_ref=1

<Directory "/home/httpdocs">
<LocationMatch "carpeta$">
     Order Deny,Allow
     Deny from all
     Allow from env=url_ref
</LocationMatch>
</Directory>


La documentación de apache dice eso:

The <LocationMatch> directive limits the scope of the enclosed directives by URL.

Lo único que se me ocurre es que quizás no hace match con la expresión regular porque le agregas un trailing slash ("/" al final)

Hekaly

Buenas y gracias por los comentarios.

Pero en toria si <Directory "/home/httpdocs"> significa que se me aplica a todo lo que cuelga de ahi, y claro carpeta$ no existe.

Aun asi, he estado dandole vueltas y con prueba y error he conseguido justo lo contrario a lo que quiero.

Código (bash) [Seleccionar]
SetEnvIfNoCase Referer "^http://dominio2" spam_ref=1
SetEnvIfNoCase Referer "^http://dominio3" spam_ref=1
RewriteCond %{HTTP_REFERER} .*dominio.com/carpeta/.* [OR]
Order Deny,Allow
Deny from env=spam_ref


BIen, con eso, consigo que todo el mundo acceda a dominio1.com/carpeta menos los dos que le digo y todo el mundo incluido dominio2 y 3 pueden acceder a raiz de dominio1.

Lo que quiero es al contrario, que en dominio1.com/carpeta solo peuda acceder por dominio2 y 3, pero si cambio el orden de alloy y deny lo que hago es aplicar toda la web, en vez de la ruta.

Ya me queda poco, xD, aun asi gracias de nuevo.

Nota. Creo que con el tema de capeta puede que sea culpa mia por explicarme mal. Como sabemos wordpress contiene 3 carpeta wp-admin, wp-content y wp-includes, por lo que dominio.com/carpeta seria en realidad dominio1.com/index.php?id=1$sección=coches (me estoy inventando la ruta). y no existiria la carpeta "coches"  como tal.


JorgeEMX

Debería funcionar con un simple Allow from:

Código (apache) [Seleccionar]
SetEnvIfNoCase Referer "^http://dominio2" spam_ref=1
SetEnvIfNoCase Referer "^http://dominio3" spam_ref=1
RewriteCond %{HTTP_REFERER} .*dominio.com/carpeta/.*
Allow from env=spam_ref


No deberías usar el OR. El Order es útil para cuando haces múltiples declaraciones Allow y Deny. Mira la documentación de Apache: http://httpd.apache.org/docs/current/mod/mod_access_compat.html