152 votes

Comment vérifier si le mod_rewrite est activé en php ?

Je me demandais s'il est possible de vérifier si mod_rewrite est activé sur Apache ET IIS en PHP .

ModRewrite pour IIS existe. Vérifiez-le here .

Donc, je cherche un script PHP qui vérifie les éléments suivants mod_rewrite en Apache y IIS.

Quelqu'un connaît-il un tel script ou peut-il en écrire un ?

Surtout pour Microsoft IIS .

Gracias.

127voto

kba Points 10874

Si vous utilisez mod_php, vous pouvez utiliser apache_get_modules() . Cela retournera un tableau de tous les modules activés, donc pour vérifier si mod_rewrite est activé, vous pouvez simplement faire

in_array('mod_rewrite', apache_get_modules());

Malheureusement, il est fort probable que vous essayiez de faire cela avec des images de synthèse, ce qui rend la tâche un peu plus difficile.

Vous pouvez cependant le tester en utilisant les éléments suivants

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

Si la condition ci-dessus est évaluée à true entonces mod_write est activé.

1 votes

Je ne sais pas. Cela teste si le module mod_rewrite est installé. Le site IIS Mod-Rewrite auquel vous faites probablement référence est un produit entièrement différent et commercial - il n'a aucun lien avec le module Apache, c'est une question entièrement différente et je n'ai aucune expérience de son utilisation.

0 votes

C'est vrai, donc il n'y a pas vraiment de script général ?

0 votes

@DrCord Alors je suppose que vous l'utilisez en CGI.

96voto

Shankar Damodaran Points 39934

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


<?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>

0 votes

Est-ce que phpinfo me dira aussi si le mod_php n'est pas activé ?

2 votes

Oui, nous pouvons voir dans phpinfo.php tous les "modules chargés" d'Apche.

54voto

a.l.e Points 309

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 dans votre code PHP la présence de

    array_key_exists('HTTP_MOD_REWRITE', $_SERVER);

Je ne sais pas si cela fonctionne également avec IIS (je n'ai aucun moyen de le vérifier) mais il y a de fortes chances que cela fonctionne.

4 votes

Avec un <IfModule mod_env.c> ce serait presque parfait. :)

0 votes

Il s'agit d'une solution très utile et simple, qui fonctionne même si PHP est exécuté en tant que CGI.

0 votes

Comme @RibeiroBreno l'a mentionné, avec <IfModule mod_env.c> ce serait presque parfait. cela a parfaitement fonctionné pour moi.

35voto

Johnny Jensen Points 193

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 Loaded Modules.

7voto

user1649798 Points 148
<?php
phpinfo();
?>

Regardez sous Configuration dans le apache2handler dans la ligne Loaded Modules.

C'est simple et ça marche.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X