Je me demandais s'il est possible de vérifier si mod_rewrite
est activé sur Apache ET IIS dans PHP
.
ModRewrite pour IIS existe. Vérifiez-le here
.
Donc, je cherche un script PHP qui vérifie mod_rewrite
sur Apache et IIS.
Est-ce que quelqu'un connaît un tel script ou peut en écrire un?
Surtout pour Microsoft IIS.
Merci!
Si vous utilisez mod_php, vous pouvez utiliser Apache_get_modules()
. Ceci retournera un tableau de tous les modules activés, donc pour vérifier si mod_rewrite
est activé, vous pouvez simplement le faire
in_array('mod_rewrite', Apache_get_modules());
Malheureusement, vous essayez probablement de faire cela avec CGI, ce qui rend les choses un peu plus difficiles.
Vous pouvez le tester en utilisant ce qui suit, bien que
strpos(Shell_exec('/usr/local/Apache/bin/apachectl -l'), 'mod_rewrite') !== false
Si la condition ci-dessus est évaluée à true
, alors mod_write
est activé.
<?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>
J'aime la solution 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>
Ensuite, vous pouvez vérifier votre code PHP pour
array_key_exists('HTTP_MOD_REWRITE', $_SERVER);
Aucune idée si cela fonctionne aussi avec IIS (je n'ai aucun moyen de vérifier), mais les chances sont bonnes.
Téléchargez un fichier appelé info.php avec ce code et exécutez-le:
<?php
phpinfo();
Recherchez mod_rewrite sur la page et voyez si vous pouvez le trouver sous Modules chargés.
ne le rendez pas si difficile que vous pouvez simplement trouver dans phpinfo();
J'espère utile!
Merci
via la ligne de commande nous en centOs nous pouvons le faire
httpd -l
<?php
phpinfo();
?>
Recherchez Configuration sous Apache2handler dans la rangée Loaded Modules.
C'est simple et ça marche.
<?php foreach( Apache_get_modules() as $module ) echo "$module<br />"; ?>
C’est ma méthode actuelle pour vérifier si Mod_rewrite est activé pour Apache et 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);
Cela fonctionne dans ma machine locale et a également fonctionné dans mon hébergeur basé sur IIS. Cependant, sur un serveur Apache particulier, cela n’a pas fonctionné pour Apache car Apache_get_modules () était désactivé mais le mod_rewrite était activé sur ce serveur.
Deux lignes de code:
$isEnabled = in_array('mod_rewrite', Apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
Une autre méthode par exec()
.
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
Si mod_rewrite
est chargé, il renverra "rewrite_module" en sortie.
Utilisez cette fonction:
function Apache_module_exists($module)
{
return in_array($module, Apache_get_modules());
}
Pourquoi ne pas faire une redirection vers un fichier connu, puis vérifier si cette redirection fonctionne réellement avec curl?
Une autre idée, en effet plus un hack sale, concernant la réécriture de mod est que le serveur est dépendant d’un problème php non nécessaire: pourquoi pas, si vous en avez la possibilité, créez un répertoire de test, mettez un .htaccess dans le réécriture en test.php, appelez via http et vérifiez si vous obtenez le résultat attendu que vous avez mis dans test.php.
En effet, sale.