Saltar al contenido

Redirigir todo a index.php usando htaccess

Nuestros programadores estrellas agotaron sus reservas de café, por su búsqueda todo el tiempo por la solución, hasta que Marco halló la solución en GitHub por lo tanto en este momento la compartimos aquí.

Solución:

Su regla de reescritura se ve casi bien.

Primero asegúrese de que su .htaccess El archivo está en la raíz de su documento (el mismo lugar que index.php) o solo afectará la subcarpeta en la que se encuentra (y cualquier subcarpeta dentro de ella, de forma recursiva).

A continuación, haga un pequeño cambio en su regla para que se vea así:

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

En este momento solo estás emparejando . cual es una instancia de cualquier personaje, necesita al menos .* para que coincida con cualquier número de instancias de cualquier carácter.

los $_GET['path'] variable contendrá la estructura de directorio falsa, por lo que /mvc/module/test por ejemplo, que luego puede usar en index.php para determinar el Controlador y 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 eso 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 .htaccess El archivo está en la raíz del documento.

Alternativa a $_GET['path'] (actualizado en febrero de 2018 y enero de 2019)

En realidad, no es necesario (ni siquiera común ahora) configurar el sendero como un $_GET variable, muchos marcos se basarán en $_SERVER['REQUEST_URI'] para recuperar la misma información, normalmente para determinar qué Controlador usar – pero el principio es exactamente el mismo.

Esto simplifica la RewriteRule ligeramente ya que no es necesario crear el sendero parámetro (lo que significa el original del OP RewriteRulevoluntad Ahora trabaja):

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

Sin embargola regla sobre la instalación en un subdirectorio todavía se aplica, por ejemplo

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


Las banderas:

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

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

QSA = Agregar cadena de consulta, en caso de que tenga algo como ?like=penguins en el extremo que desea conservar y pasar a index.php.

Para redirigir todo lo que no existe a index.php también puede utilizar el FallBackResource directiva

FallbackResource /index.php

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

Si quieres redirigir todo (including existant files or folders ) para index.php puedes usar algo como lo siguiente:

RewriteEngine on

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

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

Puedes usar algo como esto:

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

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

Acuérdate de que tienes autorización de glosar .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *