web-dev-qa-db-fra.com

Comment vérifier si mod_rewrite est activé dans php?

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!

148
TV productions

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é.

124
kba

Copiez ce morceau de code et exécutez-le pour le savoir.


<?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>
91
Shankar Damodaran

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.

51
a.l.e

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.

35
Johnny Jensen

ne le rendez pas si difficile que vous pouvez simplement trouver dans phpinfo();

enter image description here

J'espère utile!

Merci

26
loyola

via la ligne de commande nous en centOs nous pouvons le faire

httpd -l
10
h0mayun
<?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 />";  ?>
7
user1649798

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.

6
Ahmedul Haque Abid

Vous pouvez obtenir une liste des modules Apache installés et vérifier par rapport à ceux-ci. Peut-être pouvez-vous vérifier s'il est installé en recherchant son fichier .dll (ou son équivalent linux).

3
TJHeuvel

Deux lignes de code:

$isEnabled = in_array('mod_rewrite', Apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
3
Amal Murali

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.

1
Abhishek Gurjar

Utilisez cette fonction:

function Apache_module_exists($module)
{
    return in_array($module, Apache_get_modules());
}
0
Black

Pourquoi ne pas faire une redirection vers un fichier connu, puis vérifier si cette redirection fonctionne réellement avec curl?

0
rosell.dk

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.

0
webfan