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

149

Ich habe mich gefragt, ob es möglich ist zu überprüfen, ob Apache AND IIS in mod_rewriteaktiviert ist .PHP

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

Also suche ich nach einem PHP-Skript, das mod_rewritenach Apache und IIS sucht .

Kennt jemand ein solches Skript oder kann er eines schreiben?

Speziell für Microsoft IIS .

Vielen Dank!

Krawatten
quelle

Antworten:

125

Wenn Sie mod_php verwenden, können Sie verwenden apache_get_modules(). Dadurch wird ein Array aller aktivierten Module zurückgegeben. Um zu überprüfen, ob mod_rewritees aktiviert ist, können Sie dies 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 ausgewertet wird true, mod_writeist sie aktiviert.

kba
quelle
1
Ich weiß es nicht. Hiermit wird geprüft, ob das Modul mod_rewriteinstalliert ist. Das IIS Mod-Rewrite- Modul, auf das Sie sich wahrscheinlich beziehen, ist ein völlig anderes und kommerzielles Produkt - es hat keine Assoziation mit dem Apache-Modul, es ist eine ganz andere Frage und ich habe keine Erfahrung damit.
KBA
Das stimmt, also gibt es eigentlich kein allgemeines Skript?
Krawatten
@DrCord Dann schätze ich, dass Sie es in CGI verwenden.
kba
Nein, ich habe es in einem PHP-Skript verwendet, genau wie die Antwort und die Antwort unten. if (! function_exists ('apache_get_modules')) {phpinfo (); sterben; } ist immer wahr auf meinem Server ...
DrCord
2
@Gerep phpinfo()kann für viele Dinge nützlich sein. Wenn Sie jedoch ein System schreiben möchten, das verwendet, mod_rewritewenn es aktiviert ist oder auf andere Weise auf ein anderes Verhalten zurückgreift , ist es hilfreich, es programmgesteuert zu erkennen.
kba
94

Kopieren Sie diesen Code und führen Sie ihn aus, um dies 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>
Shankar Damodaran
quelle
Wird mir phpinfo auch mitteilen, wenn ich mod_php nicht aktiviert habe?
Owen McAlack
2
Ja, wir können in phpinfo.php alle "Loaded Modules" von Apche sehen
Mohini
52

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>

Dann können Sie Ihren PHP-Code für einchecken

    array_key_exists('HTTP_MOD_REWRITE', $_SERVER);

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

Ale
quelle
4
Mit einem <IfModule mod_env.c>wäre es fast perfekt. :)
RibeiroBreno
Dies ist eine sehr nützliche und einfache Lösung und funktioniert auch, wenn PHP als CGI ausgeführt wird
Jose B
Wie @RibeiroBreno erwähnte, wäre es mit <IfModule mod_env.c> fast perfekt. das hat bei mir perfekt funktioniert.
Kassem
Wenn PHP als CGI ausgeführt wird, ist dies der richtige Weg. Funktioniert wunderbar.
Wojciech Jakubas
35

Laden Sie eine Datei namens info.php mit diesem Code hoch und führen Sie sie aus:

<?php 
phpinfo();

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

Johnny Jensen
quelle
28

Mach es nicht so schwierig, dass du es einfach finden kannst phpinfo();

Geben Sie hier die Bildbeschreibung ein

Hoffe hilfreich!

Vielen Dank

Loyola
quelle
Dies war der schnellste und einfachste Weg für mich, da ich bereits mit einem phpinfo-Aufruf / einer phpinfo-Datei gearbeitet habe. Vielen Dank! :)
Brian U
@loyola, ich kann meinen Kommentar nicht aktualisieren, also habe ich gelöscht, danke
vanduc1102
11

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

httpd -l
h0mayun
quelle
1
Und wenn Sie auf Ubuntu sind: apache2 -l
youanden
2
Oder auch Apachectl-M in Ubuntu
Batandwa
Dies scheint nur Module zu zeigen, die in kompiliert wurden.
Jayarjo
2
httpd -M zeigt die Liste der geladenen statischen und gemeinsam genutzten Module an.
Jayarjo
7
<?php
phpinfo();
?>

Suchen Sie im apache2handler in der Zeile Loaded Modules unter Configuration.

Das ist einfach und funktioniert.

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

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 dies jedoch nicht für Apache, da apache_get_modules () deaktiviert war, aber mod_rewrite auf diesem Server aktiviert war.

Ahmedul Haque Abid
quelle
3

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

TJHeuvel
quelle
@kba Wie man dann im CGI-Modus nachschaut.
Ravisoni
3

Zwei Codezeilen:

$isEnabled = in_array('mod_rewrite', apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
Amal Murali
quelle
1

Noch eine Methode durch exec().

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

Wenn mod_rewritees geladen ist, wird "rewrite_module" in der Ausgabe zurückgegeben.

Abhishek Gurjar
quelle
0

Eine andere Idee, in der Tat eher ein schmutziger Hack, in Bezug auf das Umschreiben von Mods ist, dass das Serverabhängige ein nicht notwendiges PHP-Problem ist: Warum nicht, wenn Sie die Möglichkeit haben, ein Testverzeichnis erstellen, ein .htaccess in das Umschreiben in test.php einfügen, das Verzeichnis aufrufen über http und überprüfen Sie, ob Sie das erwartete Ergebnis erhalten, das Sie in test.php eingegeben haben.

In der Tat schmutzig.

Webfan
quelle
0

Verwenden Sie diese Funktion:

function apache_module_exists($module)
{
    return in_array($module, apache_get_modules());
}
Schwarz
quelle
0

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

rosell.dk
quelle
0

Für IIS-Helden und -Heldinnen:

Sie müssen nicht nach mod_rewrite suchen. Installieren Sie einfach das Rewrite 2- Modul und importieren Sie dann .htaccess- Dateien.

Shadi Namrouti
quelle