web-dev-qa-db-de.com

Wie überprüfe ich, ob mod_rewrite in PHP aktiviert ist?

Ich habe mich gefragt, ob es möglich ist zu überprüfen, ob mod_rewrite Für Apache AND [~ aktiviert ist # ~] ist [~ # ~] in PHP.

ModRewrite für IIS existiert. Überprüfen Sie es here .

Also suche ich ein PHP= Skript, das nach mod_rewrite Auf Apache und IIS.

Kennt jemand ein solches Drehbuch oder kann man schreiben?

Speziell für Microsoft ist [~ # ~] [~ # ~] .

Vielen Dank!

148
TV productions

Wenn Sie mod_php verwenden, können Sie Apache_get_modules() verwenden. Dies gibt ein Array aller aktivierten Module zurück, um zu überprüfen, ob mod_rewrite ist aktiviert, können Sie einfach tun

in_array('mod_rewrite', Apache_get_modules());

Leider versuchen Sie dies höchstwahrscheinlich mit CGI, was es etwas schwieriger macht.

Sie können es jedoch folgendermaßen testen

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

Wenn die obige Bedingung true ergibt, dann mod_write aktiviert.

124
kba

Kopieren Sie diesen Code und führen Sie ihn aus, um es herauszufinden.


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

Ich mag Christian Roys Lösung :

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

Anschließend können Sie Ihren PHP Code für einchecken

    array_key_exists('HTTP_MOD_REWRITE', $_SERVER);

Keine Ahnung, ob dies auch mit IIS (ich habe keine Möglichkeit zu überprüfen) funktioniert, aber die Chancen stehen gut.

51
a.l.e

Lade eine Datei namens info.php mit diesem Code hoch und führe sie aus:

<?php 
phpinfo();

Suchen Sie auf der Seite nach mod_rewrite und prüfen Sie, ob Sie es unter Loaded Modules finden.

35
Johnny Jensen

mach es dir nicht so schwer du findest es einfach in phpinfo();

enter image description here

Hoffe hilfreich!

Vielen Dank

26
loyola

über die Kommandozeile können wir dies in CentOs tun

httpd -l
10
h0mayun
<?php
phpinfo();
?>

Suchen Sie unter Konfiguration im Apache2handler in der Zeile Geladene Module.

Das ist einfach und funktioniert.

<?php foreach( Apache_get_modules() as $module ) echo "$module<br />";  ?>
7
user1649798

Dies ist meine aktuelle Methode, um zu überprüfen, ob Mod_rewrite sowohl für Apache als auch für IIS aktiviert ist

/**
 * --------------------------------------------------------------
 *  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);

Es funktioniert auf meinem lokalen Computer und auch in meinem IIS basierten Webhost. Auf einem bestimmten Apache-Server funktionierte es jedoch nicht für Apache, da Apache_get_modules () deaktiviert war, das mod_rewrite jedoch deaktiviert war auf diesem Server aktivieren.

6

Sie können sich eine Liste der installierten Apache-Module anzeigen lassen und dies überprüfen. Vielleicht können Sie überprüfen, ob es installiert ist, indem Sie nach der DLL-Datei (oder einer entsprechenden Linux-Datei) suchen.

3
TJHeuvel

Zwei Codezeilen:

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

Eine weitere Methode durch exec() .

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

Wenn mod_rewrite wird geladen und gibt "rewrite_module" in der Ausgabe zurück.

1
Abhishek Gurjar

Verwenden Sie diese Funktion:

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

Wie wäre es, eine Umleitung zu einer bekannten Datei durchzuführen und dann zu überprüfen, ob diese Umleitung tatsächlich mit Curl funktioniert?

0
rosell.dk

Eine andere Idee, in der Tat eher ein schmutziger Hack, in Bezug auf das Umschreiben von Mods, ist serverabhängig und ein nicht notwendiges PHP-Problem: Warum nicht, wenn Sie die Möglichkeit haben, ein Testverzeichnis zu erstellen, schreiben Sie ein über http und überprüfe, ob du das erwartete Ergebnis bekommst, das du in test.php eingibst.

In der Tat dreckig.

0
webfan