Mam nową instalację Apache 2.2 na moim komputerze z systemem Vista, wszystko działa dobrze, z wyjątkiem mod przepisywania.
Nie skomentowałem
LoadModule rewrite_module modules/mod_rewrite.s
ale żadna z moich reguł przepisywania nie działa, nawet prosta
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Wszystkie zasady, których używam, działają na moim hostingu, więc powinny być w porządku, więc moje pytanie brzmi: czy jest jakaś ukryta rzecz w konfiguracji apache, która mogłaby blokować przepisywanie modów?
apache
mod-rewrite
Jakub Arnold
źródło
źródło
AllowOverride FileInfo
zamiast zezwalać na wszystko, jak sugerują WSZYSTKIE odpowiedzi na tej stronie. Smutne, że wszystkie te odpowiedzi przyjmują podejście tak długo, jak to działa, jest w porządku, zamiast próbować zrozumieć konsekwencje proponowanego „rozwiązania”. Postaraj się zrozumieć, co robisz na serwerze i jak ograniczyć uprawnienia, które właśnie przekazałeśAllowOverride All
. RTFM! , jest dość jasne na ten temat.Odpowiedzi:
Aby użyć
mod_rewrite
, możesz wpisać następujące polecenie w terminalu:Uruchom ponownie apache2 po
lub
lub zgodnie z nowym ujednoliconym sposobem sterowania systemem
Następnie, jeśli chcesz, możesz użyć następującego
.htaccess
pliku.Powyższy
.htaccess
plik (jeśli zostanie umieszczony w Twoim plikuDocumentRoot
) przekieruje cały ruch doindex.php
pliku w pliku,DocumentRoot
chyba że plik istnieje.Załóżmy, że masz następującą strukturę katalogów, a httpdocs to
DocumentRoot
Każdy plik, który istnieje w httpdocs, zostanie dostarczony do requestera przy użyciu
.htaccess
powyższego, jednak wszystko inne zostanie przekierowanehttpdocs/index.php
. Twoje pliki aplikacji wincludes/app
nie będą dostępne.źródło
AllowOverride All
,.htaccess
aby w ogóle plik został odczytany.a2enmod rewrite
w systemie Windows?W mojej sytuacji miałem
w moim
.htaccess
, wraz z ładowanym modułem i nie działał.Rozwiązaniem mojego problemu była edycja mojego wpisu vhost na inlcude
w
<Directory>
sekcji dotyczącej danej witryny.źródło
a2enmod rewrite
&RewriteEngine On
w.htaccess
- istnienieAllowOverride all
pliku VirtualHost uniemożliwi mu działanie - to mnie przyłapało, zmieniając go tak, byAllowOverride all
działał jak urok :)AllowOverride
Dyrektywa określa „Typy dyrektyw, które są dozwolone w.htaccess
plikach”. Ponadto „Gdy ta dyrektywa jest ustawionaNone
,.htaccess
pliki są całkowicie ignorowane. W takim przypadku serwer nawet nie będzie próbował odczytać.htaccess
plików w systemie plików”. Oficjalne dokumenty: httpd.apache.org/docs/2.2/mod/core.html#allowoverridea2enmod rewrite
a następnie w pliku VirtualHosts zmień opcję „AllowOverride None” na „AllowOverride All”, powinno to działać. Plik VirtualHosts ma zastosowanie, jeśli korzystasz z wielu nazw domen na tym samym serwerze (i adresie IP). Musiałbyś to skonfigurować, aby skonfigurować domenę.Spróbuj ustawić:
AllowOverride All
.Drugim najczęstszym problemem jest brak włączonego przepisywania modów:
a2enmod rewrite
a następnie restart Apache.źródło
Jeśli żadna z powyższych czynności nie działa, spróbuj edytować / etc / apache2 / sites-enabled / 000-default
prawie na górze znajdziesz
Zmień
AllowOverride None
naAllowOverride All
to zadziałało dla mnie
źródło
/laravel/public/authors was not found on this server
na/index.php was not found on this server
<Directory /var/www/html>
aby zastosować regułę z tego folderu i tylko w górę.W Ubuntu:
Biegać:
i wtedy:
mod_rewrite
będzie teraz włączony!źródło
Istnieje wiele sposobów rozwiązania tego problemu, jeśli znasz jego przyczynę.
Problem 1
Po pierwsze, może być problem z tym, że twój apache nie ma zainstalowanego lub włączonego modułu mod_rewrite.c.
Z tego powodu należy włączyć go w następujący sposób
Otwórz konsolę i wpisz:
sudo a2enmod rewrite
Uruchom ponownie serwer Apache.
service apache2 restart
Problem 2
Oprócz powyższego możesz również, jeśli to nie zadziała, zmienić regułę nadpisywania z pliku conf apache (albo apache2.conf, http.conf, albo domyślny plik 000).
Znajdź „Katalog / var / www /”
Zmień „Zastąp brak” na „Zastąp wszystko”
Problem 3
Jeśli pojawi się błąd informujący, że moduł przepisywania nie został znaleziony, prawdopodobnie moduł userdir nie jest włączony. Z tego powodu musisz go włączyć.
Wpisz to w konsoli:
sudo a2enmod userdir
Następnie spróbuj włączyć moduł przepisywania, jeśli nadal nie jest włączony (jak wspomniano powyżej).
Aby przeczytać więcej na ten temat, możesz odwiedzić tę stronę: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
źródło
AllowOverride All
ponieważ spowoduje to włączenie zbyt wielu funkcji niebezpiecznych (takich jak używanie skryptów Perla). Zamiast tego użyjAllowOveride Options
Nowa wersja Apache w jakiś sposób się zmieniła. Jeśli twoja wersja apache to 2.4, musisz przejść do
/etc/apache2/
. Będzie plik o nazwieapache2.conf
. Musisz go edytować (powinieneś mieć uprawnienia roota). Zmień tekst katalogu w ten sposóbTeraz uruchom ponownie apache.
Mam nadzieję, że to działa.
źródło
Otwórz terminal i wpisz
a2enmod rewrite
, To pozwoli włączyćmod_rewrite
moduł dla Apache.Następnie przejdź do
/etc/apache2/sites-available
pliku domyślnego i edytuj go. (W tym celu musisz mieć uprawnienia do zapisu do tego pliku i folderu dostępnego na stronach).Zastąp poniżej istniejącymi wierszami od 4 do 14
Teraz uruchom ponownie apache za pomocą
/etc/init.d/apache2 restart
lubservice apache2 restart
Ponownie wykonaj test czystego adresu URL i tym razem zostanie on zaliczony.
źródło
<edycja>
Właśnie zauważyłem, że powiedziałeś mod_rewrite.s zamiast mod_rewrite.so - mam nadzieję, że to literówka w twoim pytaniu, a nie w pliku httpd.conf! :)
</edit>
Jestem bardziej przyzwyczajony do używania Apache w Linuksie, ale musiałem to zrobić innego dnia.
Najpierw zajrzyj do katalogu instalacyjnego Apache. (Zakładam, że zainstalowałeś go tutaj w „C: \ Program Files”)
Zajrzyj do folderu: „C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ modules” i upewnij się, że jest tam plik o nazwie mod_rewrite.so. (Powinno być, jest on dostarczany jako część domyślnej instalacji.
Następnie otwórz „C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ conf” i otwórz httpd.conf. Upewnij się, że linia:
jest niezakomentowany:
Ponadto, jeśli chcesz domyślnie włączyć RewriteEngine, możesz chcieć dodać coś takiego
na końcu pliku httpd.conf.
Jeśli nie, upewnij się, że podałeś
gdzieś w pliku .htaccess.
źródło
Właśnie to zrobiłem
następnie musisz ponownie uruchomić usługę Apache, wykonując polecenie
źródło
Stary wątek, po prostu chcę umieścić, że nie ustawiam AllowOverride na wszystkie, zamiast tego użyj konkretnego modu, którego chcesz użyć,
I tego wiersza nie należy komentować
Refrences
źródło
Użyj poniższego polecenia
I uruchom ponownie apache poprzez poniższe polecenie
źródło
Jest oczywiście więcej niż jeden sposób, ale sugerowałbym użycie bardziej standardowego:
źródło
Gdy po raz pierwszy zmagałem się z zasadami mod_rewrite ignorującymi mój ruch, dowiedziałem się (frustrująco), że źle je umieściłem
<VirtualHost>
, co oznaczało, że mój ruch zignorowałby je wszystkie, bez względu na to, jak dobrze były napisane. Upewnij się, że tak się nie dzieje:# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2
Te parametry zostaną aktywowane, jeśli wykonasz płynne ponowne uruchomienie Apache, abyś mógł je ponownie przetworzyć i ściśle monitorować zachowanie mod_rewrite. Gdy problem zostanie rozwiązany, zmniejsz RewriteLogLevel i świętuj.
W 100% z moich doświadczeń odkryłem, że RewriteLog pomógł mi odkryć problem z moimi regułami przepisywania. Nie mogę tego wystarczająco polecić. Powodzenia w rozwiązywaniu problemów!
Ponadto ta zakładka jest Twoim najlepszym przyjacielem: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
źródło
Co działało dla mnie (in ubuntu):
Ponadto, jak już wspomniano, upewnij się, że
AllowOverride all
jest ustawiony w odpowiedniej sekcji/etc/apache2/sites-available/default
źródło