Jak sprawdzić, czy mod_rewrite jest włączony na serwerze?

104

Obecnie korzystam z hostingu z serwerem lightspeed . Hosting mówi, że mod_rewritejest włączony, ale nie mogę uruchomić tam mojego skryptu. Za każdym razem, gdy próbuję uzyskać dostęp do adresu URL, zwraca 404 - nie znaleziono strony.

Umieściłem te same kody na innym serwerze, na którym działa Apache. Tam działa. Więc myślę, że to .htaccessi mod_rewriteproblem.

Ale obsługa hostingu wciąż nalega, że ​​ich mod_rewrite jest włączony, więc chciałbym wiedzieć, jak mogę sprawdzić, czy jest rzeczywiście włączony, czy nie.

Próbowałem sprawdzić phpinfo(), ale bez powodzenia, nie mogę mod_rewritetam znaleźć , czy to dlatego, że używają lightspeed?

Czy jest jakiś sposób, aby to sprawdzić? Proszę pomóż mi. Dziękuję Ci.

FYI: mój .htaccesskod to

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>

Tak też próbowałem

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]

Ale ten sam wynik.

knightrider
źródło

Odpowiedzi:

99

z wiersza poleceń wpisz

sudo a2enmod przepisać

jeśli tryb przepisywania jest już włączony, powie ci to!

KawaiKx
źródło
To najłatwiejszy sposób na włączenie przepisywania modyfikacji.
andromeda,
3
TAK ! Idealnie, po prostu idealnie.
George Dimitriadis
Pracował. Proste i łatwe. Dzięki
biplab rout
97
  1. Aby sprawdzić, czy moduł mod_rewrite jest włączony, utwórz nowy plik php w folderze głównym serwera WAMP. Wprowadź następujące informacje

    phpinfo();

  2. Uzyskaj dostęp do utworzonego pliku z przeglądarki.

  3. CtrlFaby otworzyć wyszukiwanie. Wyszukaj „mod_rewrite”. Jeśli jest włączony, zobaczysz go jako „Wczytane moduły”

  4. Jeśli nie, otwórz httpd.conf (plik konfiguracyjny Apache) i poszukaj następującego wiersza.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Usuń znak krzyżyka („#”) na początku i zapisz ten plik.

  6. Zrestartuj serwer Apache.

  7. Uzyskaj dostęp do tego samego pliku php w przeglądarce.

  8. Wyszukaj ponownie „mod_rewrite”. Teraz powinieneś być w stanie go znaleźć.

Fadzly Othman
źródło
9
Uważam, że phpinfo () zgłasza moduły załadowane przez Apache, gdy PHP jest uruchamiane jako moduł Apache. OP stwierdza, że ​​PHP działa na Lightspeed, który ma własny silnik przepisywania zgodny z mod_rewrite.
MrWhite
2
W pierwszym kroku musiałem wpisać: <? Php echo phpinfo (); ?>
Greg Noe
7
Zwróć uwagę, że ta metoda nie zadziała, jeśli używasz PHP jako aplikacji CGI (tak jest w przypadku, gdy pole phpinfo()„Server API” zawiera „CGI / FastCGI”). phpinfo()nie wyświetla włączonych modułów. W takim przypadku zobacz Jak sprawdzić, czy mod_rewrite w PHP CGI .
Rory O'Kane
67

Jeśli używasz pliku konfiguracyjnego hostów wirtualnych, upewnij się, że dany host wirtualny ma taką dyrektywę AllowOverride All:

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

Zasadniczo oznacza to zezwolenie na przetwarzanie wszystkich dyrektyw .htaccess.

Jahmic
źródło
3
Dzięki. Jestem ci winien Budweisera. <3
Nishant Ghodke,
co to znaczy ...w <Directory ...>? Co mam tam umieścić? katalog, w którym znajduje się plik .htaccess?
João Pimentel Ferreira,
tak, rzeczywiście ... należy wspomnieć w cudzysłowie "..." o katalogu, w którym znajduje się domena .htaccess
João Pimentel Ferreira
Miał. Miałem plik conf skopiowany z serwera i chociaż zmieniłem ServerName, nie zmieniłem nazwy katalogu, po tym i ponownym uruchomieniu Apache wszystko było w porządku.
D. Dan
1
Richard Jeśli ta odpowiedź zadziałała dla Ciebie i rozwiązała Twój problem, powinieneś oznaczyć ją jako poprawną i nagrodzić @Jahmic jego należność.
Sinthia V
18

Jeśli apache_get_modules () nie zostanie rozpoznana lub brak informacji o tym module w phpinfo (); spróbuj przetestować przepisywanie modów, dodając te linie do pliku .htaccess:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

Oraz mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>
smutny
źródło
15

konsola:

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

sudo a2enmod rewrite
sudo service apache2 restart
Lukas Lukac
źródło
Wiele próbowałem, aby to rozwiązać, a kiedy próbuję tego, działa to dla mnie. Mam teraz ostatniego Apache i Ubuntu.
Fernando Sanchiz
15

Jeśli

in_array('mod_rewrite', apache_get_modules())

zwraca truewtedy mod-rewrite jest włączony.

Shivanshu
źródło
Idealne rozwiązanie w jednym wierszu, aby sprawdzić, czy moduł przepisywania jest włączony lub nie, za pomocą kodów PHP.
Shakeel Ahmed
12

Zdefiniowana apache_get_modules()funkcja PHP zwraca listę włączonych modułów. Aby sprawdzić, czy mod_rewritejest włączona, możesz uruchomić następujący skrypt na swoim serwerze:

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

Jeśli powyższy przykład nie powiedzie się, możesz zweryfikować przepisywanie modów za pomocą swojego .htaccesspliku.

Utwórz htaccessplik w katalogu głównym dokumentu i dodaj następującą regułę rewriteRule:

RewriteEngine on

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

Teraz odwiedź http://example.com/HelloWorld. Zostaniesz wewnętrznie przekierowany na stronę /index.php Twojej witryny. W przeciwnym razie, jeśli mod-rewrite jest wyłączone, otrzymasz błąd serwera 500 Internel.

Mam nadzieję że to pomoże.

Amit Verma
źródło
Używam 7.2, apache_get_modules został niezdefiniowany. Czy po edycji muszę ponownie uruchomić Apache2 .htaccess?
Adi Prasetyo,
1
Nie, nie musisz ponownie uruchamiać serwera podczas korzystania z htaccess.
Amit Verma
12

możesz to zrobić na terminalu:

apachectl -M
apache2ctl -M

zaczerpnięte z 2daygeek

Adi Prasetyo
źródło
W Debianie 9 to działa, ale musisz być zalogowany jako root lub użyćsudo
androsfat
11

Działa to na CentOS:

$ sudo httpd -M |grep rewrite_module

Powinien wyjść rewrite_module (shared)

radtek
źródło
To najlepszy sposób na zrobienie tego na CentOS, zakładając, że masz dostęp do SSH. Dzięki, @radtek!
John T.
10

Jeśli ten kod znajduje się w twoim pliku .htaccess (bez sprawdzania 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]

i możesz odwiedzić dowolną stronę swojej witryny z błędem serwera 500. Myślę, że można bezpiecznie powiedzieć, że przepisywanie modów jest włączone.

Clive
źródło
3
Czy możesz uzyskać dostęp do niektórych stron w witrynie bez błędu 500? Generalnie oznaczałoby to, że jeśli czytany jest plik .htaccess, musi być włączony mod_rewrite. Jednak plik .htaccess może nie być odczytywany ... spróbuj napisać jakieś bezsensowne znaki na początku pliku .htaccess, spowoduje to zerwanie połączenia z błędem serwera 500, jeśli Apache faktycznie odczytuje plik. Jeśli jest czytany, czy możesz podać przykład adresu URL, który Twoim zdaniem powinien działać, ale nie działa?
Clive,
problem polega na tym, że to nie jest serwer Apache, tylko prędkość światła. Nigdy nie otrzymuję błędu 500, wszystko co otrzymuję to błąd 404. Dlatego wątpię, czy .htaccess nie jest włączony.
knightrider
Najprawdopodobniej tak, spróbuję wstawić bezsensowne znaki do .htaccess i sprawdzić, czy pojawia się błąd 500, kiedy przechodzisz bezpośrednio do nieprzepisywanej strony (np. Index.php). Jeśli nie, warto zadać nowe pytanie z pytaniem, jak włączyć .htaccess za pomocą Lightspeed
Clive
5

Możesz użyć funkcji php

      apache_get_modules

i sprawdź mod_rewrite

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

http://in2.php.net/apache_get_modules

Miqdad Ali
źródło
2
apache_get_modules () będzie działać tylko wtedy, gdy PHP działa jako moduł Apache. OP stwierdza, że ​​PHP działa na Lightspeed.
MrWhite
5

Jeśli jesteś w systemie Linux, możesz sprawdzić wszystkie włączające moduły dla apache2 (w moim przypadku) w następującym folderze: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

do wpisania: ll -a
jeśli chcesz sprawdzić dostępne moduły dla php (w tym przypadku php 7) folder /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

pisać: ll -a

Ezequiel De Simone
źródło
4

po prostu utwórz nową stronę i dodaj ten kod

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

i uruchom tę stronę, a następnie dowiesz się, że moduł jest dostępny lub nie, jeśli nie, możesz poprosić o hosting lub jeśli chcesz go włączyć na komputerze lokalnym, sprawdź ten samouczek na youtube krok po kroku dotyczący włączania modułu przepisywania w wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s ikona serwera Wamp -> Apache -> Apache Modules i zaznacz opcję przepisywania modułu

Hassan Saeed
źródło
2

Wiem, że to pytanie jest stare, ale jeśli możesz edytować plik konfiguracyjny Apache na AllowOverride AllzAllowOverride 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>
Znakomity Lawrence
źródło
Dobrze jest podać dokładną nazwę i, jeśli to możliwe, lokalizację pliku, który ma zostać zmieniony. Będzie to pomocne dla nowo przybyłych. Dzięki
MindRoasterMir
Należy również pamiętać, że zmiany zaczynają obowiązywać dopiero po ponownym przywróceniu apache. dzięki
MindRoasterMir
1

Musisz tylko sprawdzić, czy plik tam jest, wpisując

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

Wiersz wyniku nie może być komentowany zaczynając od #

João Pimentel Ferreira
źródło
1

Ten kod zadziałał dla mnie:

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

Miałem dokładny problem, rozwiązałem go, klikając niestandardową strukturę, a następnie dodając /index.php/%postname%/i działa

Mam nadzieję, że to oszczędza komuś stresu, przez który przeszedłem, znajdując, do cholery, z tym nie tak.

Kyle S.
źródło