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 />"; ?>