Wie überprüfe ich, ob mod_rewrite auf dem Server aktiviert ist?

104

Derzeit verwende ich das Hosting mit Lightspeed- Server. Hosting sagt, mod_rewriteist aktiviert, aber ich kann mein Skript dort nicht zum Laufen bringen. Immer wenn ich versuche, auf die URL zuzugreifen, wird die Seite 404 - nicht gefunden zurückgegeben .

Ich habe die gleichen Codes auf einem anderen Server abgelegt, der mit Apache ausgeführt wird. Es funktioniert dort drüben. Also ich denke, es ist das .htaccessund mod_rewriteProblem.

Der Hosting-Support besteht jedoch immer noch darauf, dass mod_rewrite aktiviert ist. Daher möchte ich wissen, wie ich überprüfen kann, ob es tatsächlich aktiviert ist oder nicht.

Ich habe versucht, mich zu erkundigen phpinfo(), aber kein Glück, ich kann es dort nicht finden mod_rewrite, liegt es daran, dass sie es benutzen lightspeed?

Gibt es eine Möglichkeit zu überprüfen? Bitte hilf mir. Danke dir.

Zu Ihrer Information: Mein .htaccessCode ist

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

Ich habe es auch so versucht

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

Aber das gleiche Ergebnis.

Ritter
quelle

Antworten:

98

Geben Sie in der Befehlszeile Folgendes ein

sudo a2enmod umschreiben

Wenn der Umschreibemodus bereits aktiviert ist, werden Sie darüber informiert!

KawaiKx
quelle
Dies ist der einfachste Weg, um das Umschreiben von Mods zu aktivieren.
Andromeda
3
JA ! Perfekt, einfach perfekt.
George Dimitriadis
Hat funktioniert. Simpel und einfach. Danke
Biplab Router
96
  1. Um zu überprüfen, ob das Modul mod_rewrite aktiviert ist, erstellen Sie eine neue PHP-Datei in Ihrem Stammordner Ihres WAMP-Servers. Geben Sie das folgende ein

    phpinfo();

  2. Greifen Sie über Ihren Browser auf Ihre erstellte Datei zu.

  3. CtrlFum eine Suche zu öffnen. Suche nach 'mod_rewrite'. Wenn es aktiviert ist, wird es als "Geladene Module" angezeigt.

  4. Wenn nicht, öffnen Sie httpd.conf (Apache Config-Datei) und suchen Sie nach der folgenden Zeile.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Entfernen Sie das Nummernzeichen ('#') am Anfang und speichern Sie diese Datei.

  6. Starten Sie Ihren Apache-Server neu.

  7. Greifen Sie in Ihrem Browser auf dieselbe PHP-Datei zu.

  8. Suchen Sie erneut nach 'mod_rewrite'. Sie sollten es jetzt finden können.

Fadzly Othman
quelle
9
Ich glaube, phpinfo () meldet die geladenen Apache- Module, wenn PHP selbst als Apache-Modul ausgeführt wird. Das OP gibt an, dass PHP auf Lightspeed ausgeführt wird, das über eine eigene mod_rewrite-kompatible Rewrite-Engine verfügt.
MrWhite
2
Für den ersten Schritt musste ich Folgendes eingeben: <? Php echo phpinfo (); ?>
Greg Noe
6
Beachten Sie, dass diese Methode nicht funktioniert, wenn Sie PHP als CGI-Anwendung ausführen (was der Fall ist, wenn im phpinfo()Feld "Server-API" "CGI / FastCGI" angezeigt wird). phpinfo()listet die aktivierten Module nicht auf. In diesem Fall lesen Sie, wie Sie in PHP CGI nach mod_rewrite suchen .
Rory O'Kane
67

Wenn Sie eine Konfigurationsdatei für virtuelle Hosts verwenden, stellen Sie sicher, dass der betreffende virtuelle Host über die folgende Anweisung verfügt AllowOverride All:

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

Grundsätzlich bedeutet dies, dass alle .htaccess-Anweisungen verarbeitet werden können.

Jahmic
quelle
3
Vielen Dank. Ich schulde dir einen Budweiser. <3
Nishant Ghodke
was bedeutet das ...in <Directory ...>? Was soll ich dort setzen? das Verzeichnis, in dem sich .htaccess befindet?
João Pimentel Ferreira
Ja, in der Tat, das ... sollte zwischen Anführungszeichen "..." das Verzeichnis erwähnen, in dem .htaccess ist
João Pimentel Ferreira
Es hatte. Ich hatte die conf-Datei vom Server kopiert und während ich die geändert hatte ServerName, hatte ich den Verzeichnisnamen nicht geändert, danach und nach einem Apache-Neustart war es in Ordnung.
D. Dan
1
RichardWenn diese Antwort für Sie funktioniert und Ihr Problem gelöst hat, sollten Sie sie als richtig markieren und @Jahmic seine Schuld zusprechen.
Sinthia V
18

Wenn apache_get_modules () nicht erkannt wird oder keine Informationen zu diesem Modul in phpinfo () vorhanden sind; Versuchen Sie, das Umschreiben von Mods zu testen, indem Sie diese Zeilen in Ihre .htaccess-Datei einfügen:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

Und mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>
wappy
quelle
15

Konsole:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart
Lukas Lukac
quelle
Ich habe viel versucht, dies zu lösen, und wenn ich das versuche, funktioniert es für mich. Ich habe jetzt den letzten Apache und Ubuntu.
Fernando Sanchiz
15

Wenn

in_array('mod_rewrite', apache_get_modules())

Gibt zurück, truedann ist Mod-Rewrite aktiviert.

Shivanshu
quelle
Perfekte einzeilige Lösung, um zu überprüfen, ob das Umschreibemodul über PHP-Codes aktiviert ist oder nicht.
Shakeel Ahmed
12

Die perdefinierte apache_get_modules()Funktion von PHP gibt eine Liste der aktivierten Module zurück. Um zu überprüfen, ob diese mod_rewriteOption aktiviert ist, können Sie das folgende Skript auf Ihrem Server ausführen:

<?php
print_r(apache_get_modules());
?>

Wenn das obige Beispiel fehlschlägt, können Sie das Umschreiben von Mods anhand Ihrer .htaccessDatei überprüfen .

Erstellen Sie eine htaccessDatei im Dokumentstamm und fügen Sie die folgende rewriteRule hinzu:

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

Besuchen Sie jetzt http://example.com/HelloWorld . Sie werden intern zur Seite /index.php Ihrer Website weitergeleitet. Andernfalls wird bei Deaktivierung von mod-rewrite ein 500 Internel-Serverfehler angezeigt.

Hoffe das hilft.

Amit Verma
quelle
Ich benutze 7.2, Apache_get_modules wurde undefiniert. Muss ich apache2 nach der Bearbeitung neu starten .htaccess?
Adi Prasetyo
1
Nein, Sie müssen Ihren Server nicht neu starten, wenn Sie htaccess verwenden.
Amit Verma
12

Sie können dies entweder auf dem Terminal tun:

apachectl -M
apache2ctl -M

genommen von 2daygeek

Adi Prasetyo
quelle
In Debian 9 funktioniert es, aber Sie müssen als root angemeldet sein oder verwendensudo
androsfat
11

Dies funktioniert unter CentOS:

$ sudo httpd -M |grep rewrite_module

Sollte ausgeben rewrite_module (shared)

radtek
quelle
Dies ist der beste Weg, dies unter CentOS zu tun, vorausgesetzt, Sie haben SSH-Zugriff. Danke, @radtek!
John T.
10

Wenn sich dieser Code in Ihrer .htaccess-Datei befindet (ohne die Überprüfung auf mod_rewrite.c)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

und Sie können jede Seite Ihrer Site mit einem 500-Server-Fehler besuchen. Ich denke, es ist sicher zu sagen, dass Mod Rewrite aktiviert ist.

Clive
quelle
3
Sie können also ohne 500 Fehler auf einige Seiten der Website zugreifen? Das würde im Allgemeinen bedeuten, dass mod_rewrite eingeschaltet sein muss, wenn die .htaccess-Datei gelesen wird. Der .htaccess wird jedoch möglicherweise nicht gelesen. Versuchen Sie, einige unsinnige Zeichen oben in Ihre .htaccess-Datei zu schreiben. Dies führt dazu, dass die Verbindung mit einem 500-Server-Fehler unterbrochen wird, wenn Apache die Datei tatsächlich liest. Können Sie beim Lesen ein Beispiel für eine URL angeben, die Ihrer Meinung nach funktionieren sollte, dies aber nicht tut?
Clive
Das Problem ist, es ist kein Apache-Server, es ist Lichtgeschwindigkeit. Ich bekomme nie 500 Fehler, alles was ich bekomme ist 404 Fehler. Deshalb bezweifle ich, dass .htaccess nicht aktiviert ist.
Knighttrider
Höchstwahrscheinlich würde ich versuchen, die Unsinnszeichen in .htaccess einzufügen und zu prüfen, ob der Fehler 500 angezeigt wird, wenn Sie direkt zu einer nicht umgeschriebenen Seite (z. B. index.php) wechseln. Wenn nicht, könnte es sich lohnen, eine neue Frage zu stellen, wie .htaccess mit Lightspeed
Clive
5

Sie können die PHP-Funktion verwenden

      apache_get_modules

und auf mod_rewrite prüfen

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules

Miqdad Ali
quelle
2
apache_get_modules () funktioniert nur, wenn PHP als Apache-Modul ausgeführt wird. Das OP gibt an, dass PHP mit Lightspeed ausgeführt wird.
MrWhite
5

Wenn Sie sich in einem Linux-System befinden, können Sie alle Aktivierungsmodule für Apache2 (in meinem Fall) im folgenden Ordner überprüfen: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

zu tippen: ll -a
wenn Sie die verfügbaren Module für den PHP-Ordner (in diesem Fall PHP 7) überprüfen möchten /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

tippen: ll -a

Ezequiel De Simone
quelle
4

Erstellen Sie einfach eine neue Seite und fügen Sie diesen Code hinzu

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

und führen Sie diese Seite aus, und finden Sie heraus, ob das Modul verfügbar ist oder nicht. Wenn nicht, können Sie sich an Ihr Hosting wenden. Wenn Sie es auf einem lokalen Computer aktivieren möchten, lesen Sie dieses Schritt-für-Schritt-Tutorial für YouTube, um das Modul zum Umschreiben in Wamp Apache zu aktivieren https://youtu.be/xIspOX9FuVU?t=1m43s Wamp-Server-Symbol -> Apache -> Apache-Module und aktivieren Sie die Option Modul neu schreiben

Hassan Saeed
quelle
2

Ich weiß, dass diese Frage alt ist, aber wenn Sie Ihre Apache-Konfigurationsdatei AllowOverride Allvon bearbeiten könnenAllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>
Ausgezeichneter Lawrence
quelle
Es ist eine gute Idee, den genauen Namen und nach Möglichkeit den Speicherort der zu ändernden Datei anzugeben. Es wird für die Neuankömmlinge hilfreich sein. Danke
MindRoasterMir
Es sollte auch beachtet werden, dass die Änderungen erst wirksam werden, nachdem Sie Ihren Apache angepasst haben. danke
MindRoasterMir
1

Sie müssen nur durch Eingabe überprüfen, ob die Datei vorhanden ist

cat /etc/apache2/mods-available/rewrite.load

Die Ergebniszeile darf nicht beginnend mit kommentiert werden #

João Pimentel Ferreira
quelle
1

Dieser Code hat bei mir funktioniert:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";
Keinan Goichman
quelle
0

Ich hatte das genaue Problem, ich löste es, indem ich auf benutzerdefinierte Struktur klickte, dann hinzufügte /index.php/%postname%/und es funktionierte

Ich hoffe, das erspart jemandem den Stress, den ich durchgemacht habe, um herauszufinden, was zum Teufel daran falsch war.

Kyle S.
quelle