Para próxima versión IIS Ajax Ocrend Framework

Tema en 'Soporte' iniciado por Kenneth Gómez, el 6 Dic 2017.

  1. Kenneth Gómez

    Kenneth Gómez New Member

    Registrado:
    11 Oct 2017
    Mensajes:
    21
    Me Gusta recibidos:
    4
    Puntos de trofeo:
    3
    Género:
    Masculino
    Todo funcionaba perfectamente en mi localhost en Xampp, en cambio al aplicarlo a mi servidor virtual IIS daba problemas. Error 404 primero y luego error 500.
     
  2. Marco Corona

    Marco Corona Member

    Registrado:
    29 Sep 2017
    Mensajes:
    32
    Me Gusta recibidos:
    6
    Puntos de trofeo:
    8
    Género:
    Masculino
    Hola, yo ya pasé por esa experiencia.

    Te comento que esto se debe a que en xampp (Apache) se utiliza el archivo htacces para establecer las reglas con el modrewriter, en el que se especifica que todo a partir del dominio base, lo envíe a index.php, en el caso de IIS se supone que debes utilizar las reglas de reescritura de URL, en mi experiencia no pude configurarlo núnca de manera completa, no pude hacer funcionar el api nunca.

    Termine instalando apache en el servidor XD.
     
    A Kenneth Gómez le gusta esto.
  3. Kenneth Gómez

    Kenneth Gómez New Member

    Registrado:
    11 Oct 2017
    Mensajes:
    21
    Me Gusta recibidos:
    4
    Puntos de trofeo:
    3
    Género:
    Masculino
    Muchas gracias por responder Marco, pues yo por mi cuenta conseguí resolverlo, lo dejaré aquí por si prinick gusta a ponerlo para la nueva versión y si tú cambias a IIS, o, para todo el que lo necesite.

    En el directorio principal debéis poner en un web.config

    HTML:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Rule 1" stopProcessing="true">
                        <match url="^(?!(?:api)/)(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="index.php?routing={R:1}" appendQueryString="true" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    
    En el directorio api debéis poner otro web.config de la siguiente manera:

    HTML:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Rule 2" stopProcessing="true">
                        <match url="^" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="index.php" appendQueryString="true" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    Explico:
    En la primera regla defines la redirección de las rutas tal y como lo establece el framework, en cambio debes poner
    HTML:
    <match url="^(?!(?:api)/)(.*)$" ignoreCase="false" />
    
    Para que esa regla no afecte al directorio API, si quieres añadir más directorios al que la primera regla no afecten, pones esto:
    HTML:
    <match url="^(?!(?:api|ElSegundoDirectorio|ElTercero|Etc)/)(.*)$" ignoreCase="false" />
    
    Así, llega en su lugar la regla número 2 sólo para esos casos, ya que el web.config que se encuentra en el directorio principal tiene más prioridad.

    Pasa esto porque Apache tiene los .htaccess como prioridad de sustitución según directorio, es decir, el .htaccess en directorio principal afecta a TODOS los directorios que NO tengan .htaccess en su interior como método de sustitución, en cambio en IIS al ser reglas, no hay manera de darle prioridad más que excluyendo el directorio que tenga su propia regla en su interior.

    -
    Kenneth
     
    A prinick le gusta esto.
  4. Marco Corona

    Marco Corona Member

    Registrado:
    29 Sep 2017
    Mensajes:
    32
    Me Gusta recibidos:
    6
    Puntos de trofeo:
    8
    Género:
    Masculino
    Excelente aporte Kenneth, gracias.
     
  5. prinick

    prinick Ocrend Developer Miembro del Staff

    Registrado:
    28 Sep 2017
    Mensajes:
    76
    Me Gusta recibidos:
    9
    Puntos de trofeo:
    8
    Género:
    Masculino
    Profesión:
    Engineer
    País:
    venezuela
    Efectivamente, excelente aporte.
     

Compartir esta página