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 RewriteRule
voluntad 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 .