redireccionar ocultar index htaccess enmascarar ejemplo dominio descargar crear con carpeta php .htaccess

php - ocultar - redireccionar con htaccess



Redirigir todo a index.php htaccess (5)

Hay un "truco" para este problema que se ajusta a todos los escenarios, una solución tan obvia que tendrás que probar para creer que realmente funciona ... :)

Aquí está...

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L,QSA] </IfModule>

Básicamente, está pidiendo a MOD_REWRITE que reenvíe a index.php la solicitud de URI siempre que exista un archivo Y siempre que el archivo solicitado no exista .

Al investigar el código fuente de MOD-REWRITE para comprender cómo funciona, me di cuenta de que todas las comprobaciones siempre se realizan después de la verificación, si el archivo al que se hace referencia existe o no. Solo entonces se procesan los RegEx . Incluso cuando su URI apunta a una carpeta, Apache aplicará la verificación de los archivos de índice listados en su archivo de configuración.

Basado en ese simple descubrimiento, resultó obvio que una simple validación de archivos sería suficiente para todas las llamadas posibles , siempre que toquemos dos veces la verificación de presencia de archivos y encaminemos ambos resultados al mismo punto final, cubriendo el 100% de las posibilidades.

IMPORTANTE: Tenga en cuenta que no hay " / " en index.php . Por defecto, MOD_REWRITE usará la carpeta que está configurada como "carpeta base" para el reenvío. La belleza de esto es que no necesariamente tiene que ser la "carpeta raíz" del sitio, permitiendo que esta solución funcione para localhost/ y cualquier subcarpeta que usted aplique.

Finalmente, algunas otras soluciones que probé antes (las que parecían funcionar bien) rompieron la capacidad de PHP de "exigir" un archivo a través de su ruta relativa, lo cual es un fastidio. Ten cuidado.

Algunas personas pueden decir que esta es una solución poco elegante. Puede ser, en realidad, pero en cuanto a las pruebas, en varios escenarios, varios servidores, varias versiones diferentes de Apache, etc., ¡esta solución funcionó al 100% en todos los casos!

Mis disculpas por la pregunta 10000000a sobre este tema, pero simplemente no puedo hacer que funcione de la manera que quiero.

Estoy escribiendo un simple framework php mvc''ish. Quiero que este marco se pueda instalar en cualquier directorio.

Lo que hace mi script php: toma la solicitud uri y la divide en segmentos. Convertir el segmento 1 en controlador y el segmento 2 en acción. Esto va bien cuando hago esto:

http://www.domain.com/mvc/module/test/

Irá al controlador y método del módulo específico. Ahora tengo un controlador predeterminado, el controlador doméstico, que está en la carpeta de inicio.

Ahora cuando accedo a esta carpeta directamente, http://www.domain.com/mvc/home/ mostrará un 403 prohibido, porque esta carpeta existe, en su lugar también debería volver a http://www.domain.com/mvc/index.php

Si hubiera instalado el framework en una carpeta diferente, digamos que el framework de carpetas tiene que redireccionar a http://www.domain.com/framework/index.php

Me gustaría redirigir todas las carpetas y archivos php a index.php, dejando todo lo demás como está.

Mi primer problema que encontré fue que nunca redirige a la carpeta correcta, siempre a la carpeta raíz del dominio.

Esto es lo que intenté:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php [L]

¡Realmente espero que alguien pueda ayudarme o señalarme en la dirección correcta!

¡¡Muchas gracias!!


Para redirigir todo lo que no existe a index.php , también puede usar la directiva FallBackResource

FallbackResource /index.php

Funciona igual que el ErrorDocument , cuando solicita una ruta o un archivo inexistente en el servidor, la directiva silenciosamente remite la solicitud a index.php .

Si desea redireccionar todo ( including existant files or folders ) a index.php , puede usar algo como lo siguiente:

RewriteEngine on RewriteRule ^((?!index/.php).+)$ /index.php [L]

Tenga en cuenta que el patrón ^((?!index/.php).+)$ Coincide con cualquier uri, excepto index.php , hemos excluido la ruta de destino para evitar el error infinito de bucle.


Puedes usar algo como esto:

RewriteEngine on RewriteRule ^.+$ /index.php [L]

Esto redirigirá todas las consultas al index.php del directorio raíz. Tenga en cuenta que también redirigirá las consultas de archivos que existen, como imágenes, archivos javascript u hojas de estilo.


Tu regla de reescritura parece casi correcta.

Primero asegúrese de que su archivo .htaccess esté en la raíz de su documento (el mismo lugar que index.php ) o que solo afecte a la subcarpeta en la que se encuentra (y cualquier subcarpeta dentro de eso - recursivamente).

Luego haga un ligero cambio en su regla para que se vea algo así como:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

Por el momento solo estás haciendo coincidir . que es una instancia de cualquier personaje, necesitas al menos .* para que coincida con cualquier cantidad de instancias de cualquier personaje.

La $_GET[''path''] contendrá la estructura falsa del directorio, entonces /mvc/module/test por ejemplo, que luego puede usar en index.php para determinar el Controlador y las acciones que desea realizar.


Si desea que todo el shebang se instale en un subdirectorio, como /mvc/ o /framework/ la forma menos complicada de hacerlo es cambiar ligeramente la regla de reescritura para tener esto en cuenta.

RewriteRule ^(.*)$ /mvc/index.php?path=$1 [NC,L,QSA]

Y asegúrese de que su index.php esté en esa carpeta, mientras que el archivo .htaccess está en la raíz del documento.


Alternativa a $_GET[''path''] (actualizado Feb ''18)

En realidad no es necesario (ni siquiera ahora es común) establecer la ruta como una variable $_GET , muchos marcos dependerán de $_SERVER[''REQUEST_URI''] para recuperar la misma información, normalmente para determinar qué controlador usar, pero el principio es exactamente lo mismo.

Esto simplifica ligeramente la RewriteRule ya que no necesita crear el parámetro de ruta :

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /index.php [L,QSA]

Las mismas reglas sobre la instalación en un subdirectorio aún se aplican, por ejemplo

RewriteRule ^.*$ /mvc/index.php [L,QSA]


Las banderas:

NC = Sin caso (no es sensible a mayúsculas y minúsculas, no es realmente necesario ya que no hay caracteres en el patrón)

L = Last (dejará de reescribir después de esta reescritura, así que asegúrese de que sea lo último en su lista de reescrituras)

QSA = Query String Apend, en caso de que tenga algo como ?like=penguins Like = pingguins en el extremo que desea conservar y pasar a index.php.


Una respuesta tonta, pero si no puede entender por qué no está redireccionando, verifique que lo siguiente esté habilitado para la carpeta web.

AllowOverride All

¡Esto le permitirá ejecutar htaccess, que debe estar ejecutándose! (Hay alternativas, pero no en, causarán problemas https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride )