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.

Antworten:


98

Geben Sie in der Befehlszeile Folgendes ein

sudo a2enmod umschreiben

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


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.


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.


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!"; ?>

15

Konsole:

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

sudo a2enmod rewrite
sudo service apache2 restart

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.


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.


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


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)


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.


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


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


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


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>

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 #


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";

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.