mod_rewrite habilitar enabled check php apache mod-rewrite iis

habilitar - ¿Cómo verificar si mod_rewrite está habilitado en php?



habilitar mod_rewrite apache2 ubuntu (12)

Me preguntaba si es posible verificar si mod_rewrite está habilitado en Apache AND IIS en PHP .

ModRewrite para IIS existe. Verifíquelo here .

Por lo tanto, estoy buscando un script PHP que busque mod_rewrite en Apache e IIS.

¿Alguien conoce ese guión o puede escribir uno?

Especialmente para Microsoft IIS .

¡Gracias!


Copie este fragmento de código y ejecútelo para descubrirlo.

<?php if(!function_exists(''apache_get_modules'') ){ phpinfo(); exit; } $res = ''Module Unavailable''; if(in_array(''mod_rewrite'',apache_get_modules())) $res = ''Module Available''; ?> <html> <head> <title>A mod_rewrite availability check !</title></head> <body> <p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p> </body> </html>


Dos líneas de código:

$isEnabled = in_array(''mod_rewrite'', apache_get_modules()); echo ($isEnabled) ? ''Enabled'' : ''Not enabled'';


Este es mi método actual para verificar si Mod_rewrite está habilitado tanto para Apache como para IIS.

/** * -------------------------------------------------------------- * MOD REWRITE CHECK * -------------------------------------------------------------- * - By A H Abid * Define Constant for MOD REWRITE * * Check if server allows MOD REWRITE. Checks for both * Apache and IIS. * */ if( function_exists(''apache_get_modules'') && in_array(''mod_rewrite'',apache_get_modules()) ) $mod_rewrite = TRUE; elseif( isset($_SERVER[''IIS_UrlRewriteModule'']) ) $mod_rewrite = TRUE; else $mod_rewrite = FALSE; define(''MOD_REWRITE'', $mod_rewrite);

Funciona en mi máquina local y también funcionó en mi servidor web basado en IIS. Sin embargo, en un servidor apache en particular, no funcionó para Apache ya que apache_get_modules () estaba deshabilitado pero el mod_rewrite estaba habilitado en ese servidor.


Me gusta la solución de Christian Roy :

### .htaccess <IfModule mod_rewrite.c> # Tell PHP that the mod_rewrite module is ENABLED. SetEnv HTTP_MOD_REWRITE On RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # The rest of your rewrite rules here </IfModule>

Luego, puedes verificar tu código PHP para

array_key_exists(''HTTP_MOD_REWRITE'', $_SERVER);

No tengo idea si esto también funciona con IIS (no tengo manera de verificarlo) pero las probabilidades son buenas.


Otra idea, de hecho más un truco sucio, con respecto a la reescritura mod es el servidor dependend no es necesario un problema php: ¿Por qué no, si tiene la posibilidad, cree un directorio de prueba ponga un .htaccess en él reescribiendo a test.php, llame al directorio a través de http y compruebe si obtiene el resultado esperado que puso en test.php.

De hecho, sucio.


Puede obtener una lista de los módulos de Apache instalados y verificar eso. Quizás pueda verificar si está instalado buscando su archivo .dll (o equivalente de Linux).


Si está utilizando mod_php, puede usar apache_get_modules() . Esto devolverá una matriz de todos los módulos habilitados, por lo que para verificar si mod_rewrite está habilitado, simplemente puede hacer

in_array(''mod_rewrite'', apache_get_modules());

Desafortunadamente, lo más probable es que intentes hacer esto con CGI, lo que lo hace un poco más difícil.

Sin embargo, puedes probarlo usando lo siguiente

strpos(shell_exec(''/usr/local/apache/bin/apachectl -l''), ''mod_rewrite'') !== false

Si la condición anterior se evalúa como true , entonces mod_write está habilitado.


Suba un archivo llamado info.php con este código y ejecútelo:

<?php phpinfo();

Busque mod_rewrite en la página y vea si puede encontrarlo en Loaded Modules.


Un método más a través de exec() .

exec(''/usr/bin/httpd -M | find "rewrite_module"'',$output);

Si se carga mod_rewrite , se devolverá "rewrite_module" en la salida.


a través de línea de comandos que en centOs podemos hacer esto

httpd -l


no lo haga tan difícil que simplemente puede encontrarlo en phpinfo();

Espero ayuda!

Gracias


<?php phpinfo(); ?>

Busque en Configuración en apache2handler en la fila de Módulos cargados.

Esto es simple y funciona.

<?php foreach( apache_get_modules() as $module ) echo "$module<br />"; ?>