Skip to content

Instantly share code, notes, and snippets.

@JCervantesB
Last active October 13, 2024 07:27
Show Gist options
  • Save JCervantesB/4ebff26de0d75c3598290d2db351825d to your computer and use it in GitHub Desktop.
Save JCervantesB/4ebff26de0d75c3598290d2db351825d to your computer and use it in GitHub Desktop.
htaccess para proyectos MVC CodigoConJuan
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
DirectoryIndex index.php
RewriteEngine On
RewriteRule ^$ public/index.php [L]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]

Para que los proyectos MVC te funcionen en laragon/apache, requieres de unos archivos de configuración adicionales conocidos como htaccess Necesitas crear 2 archivos, ambos llamados:

.htaccess

Es importante que el nombre sea tal cual con todo y el punto. Uno en la raíz del proyecto con el que redireccionaras hacia /public y otro mas dentro de /public con que el harás funcionar todas las rutas declaradas en nuestro index.php

.htaccess para la raíz

DirectoryIndex index.php

RewriteEngine On
RewriteRule ^$ public/index.php [L]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]

.htaccess para la carpeta public

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

Esto también aplica para la configuración en Apache visto en la sección 17 Ambiente de Desarrollo Windows Pero para que apache funcione con los .htaccess es necesario editar el archivo httpd.conf que se encuentra en C:\apache\conf Dentro de este archivo hacer una busqueda por "/htdocs" (sin comillas) Esto te llevara a la línea 251 del archivo original.

DocumentRoot "${SRVROOT}/htdocs"

un poco mas abajo encontraras la siguiente línea de texto:

AllowOverride none

Hay que cambiar el "none" por "All" de esta forma:

AllowOverride All

En nuevas versiones de Apache tambien es necesario cargar el modulo rewrite, por lo que es necesario descomentar la siguiente linea eliminando el # del comienzo

#LoadModule rewrite_module modules/mod_rewrite.so

Guardar cambios y reiniciar el servicio de apache, con ello ya debería funcionar cualquier proyecto MVC con el framework del profesor Juan De la Torre también en apache

@dmontenegroh
Copy link

Estoy arrancando el servidor desde apache, hice los cambios pero al ir a la ruta me sale: 500 Internal Server Error

@olivaresdei6
Copy link

olivaresdei6 commented Jan 25, 2023 via email

@dmontenegroh
Copy link

El error se debia a que tenia un atributo comentado en httpd.conf precisamente este LoadModule rewrite_module modules/mod_rewrite.so.

@feapta
Copy link

feapta commented Apr 5, 2023

Error 500, y tengo todo como lo pones en el articulo

@JCervantesB
Copy link
Author

Un error 500 se origina normalmente por un problema o error en tu propio código, tendrías que habilitar los errores de php para que te muestre más específicamente la razón del problema

@ezequiel-bursa
Copy link

En Laragon no consigo que funcione el .httaccess

@Yiskoz
Copy link

Yiskoz commented Aug 25, 2023

Buenas tardes,

Hice deploy en Heroku, al utilizar este método la página me permitía usar la ruta "public/index.php" (incluso teniendo configurado el Router para redirigir).

Bueno, la configuración que he usado es la siguiente para solucionar el problema;

Procfile en la raiz;
web: vendor/bin/heroku-php-apache2 public/
.htaccess en /public

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond ${HTTPS} off
    RewriteRule ^(.*)$ https://taberna-alhambra.es/$1 [QSA,PT,L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

Pero tengo un problema que aún no consigo resolverlo de ningún modo, necesito forzar la redirección de HTTP a HTTPS, lo he tratado varias veces pero no doy con la solución. ¿Hay alguna manera de implementar esto?

@Yiskoz
Copy link

Yiskoz commented Aug 25, 2023

Actualización:

Tal vez esta información sea útil para alguien que esté buscando forzar HTTPS en su página;

.htaccess de /public

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    # If we receive a forwarded http request from a proxy...
    RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
    
    # ...or just a plain old http request directly from the client
    RewriteCond %{HTTP:X-Forwarded-Proto} =""
    RewriteCond %{HTTPS} !=on
    
    # Redirect to https version
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    # Put the rest of your rewrite rules here


    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

Con eso se consigue redirigir al usuario al protocolo HTTPS aunque el intente acceder al HTTP

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment