He buscado en Google y StackOverflow la respuesta a esta pregunta, pero el hecho de que no sé mucho sobre .htaccess no me ayuda a decidir cuáles son las respuestas correctas para mi situación, así que estoy preguntando aquí..htaccess RewriteCond donde URI no contiene el dominio
Mi situación es que tengo varios sitios que usan el mismo directorio físico que su raíz en el servidor.
Todo funciona bien pero quería asegurarme de que cada sitio no pueda acceder a las imágenes de los demás, etc. desde el navegador a menos que estén en el dominio correcto.
Actualmente tengo una estructura de archivos como esto:
/resources/{resource}/{full_domain_name}
Así, por ejemplo www.domain.co.uk
tendría una estructura como esta:
http://www.domain.co.uk/resources/images/www.domain.co.uk/some_image.jpg
Pero si www.domain_2.co.uk
existe usando el mismo directorio físico para el sitio raíz, entonces pueden ver los recursos de otros dominios desde su propio dominio, como este:
http://www.domain_2.co.uk/resources/images/www.domain.co.uk/some_image.jpg
Esto no es realmente un problema importante ya que no hay absolutamente ninguna información sensible almacenada en estos directorios, pero es más una molestia y preferiría que los usuarios no pudieran hacerlo (no es que alguien lo haya hecho hasta ahora).
He intentado poner un archivo .htaccess en el directorio/recursos, pero tengo que cargar con las expresiones regulares, etc.
Básicamente quiero para asegurarse de que el URI contiene el nombre de dominio actual de lo contrario redirigir a un 403 página de error
Esto es lo que ocurrió:
RewriteCond %{REQUEST_URI} !^(/resources/[^/]*/%{HTTP_HOST})(.*)$
RewriteRule ^(.*)$ /error/403.php
La razón por la que puse en el bit [^/]
es porque hay varias carpetas, por ejemplo:
/resources/images/{full_domain_name}
/resources/scripts/{full_domain_name}
/resources/stylesheets/{full_domain_name}
Podría alguien ayudarme con estos condiciones?
Cualquier ayuda sería apreciada.
¿Cuál es el resultado de su regla actual? Parece que funcionaría, excepto que no necesita ningún '()' alrededor de '/ resources/[^ /] * /% {HTTP_HOST}. *' –
@Michael Actualmente, si estoy en www.domain.co .uk y vaya a www.domain.co.uk/resources/stylesheets/www.domain.co.uk/style.css, por ejemplo, siempre me redirecciona al archivo /error/403.php. Cuando elimino la regla .htaccess, encuentra el archivo como debería hacerlo normalmente. –
En realidad, no necesita todo el '% {REQUEST_URI}' representado en la expresión regular. Simplemente puede hacer coincidir el http_host 'RewriteCond% {REQUEST_URI}! ^. +% {HTTP_HOST}' –