Włącz przepisywanie adresów URL (mod_rewrite) przy użyciu plików .htaccess w ~ / Sites na Lionie

13

Nie mogę zmusić mod_rewrite do pracy na Lionie. Wiele witryn rozwijam lokalnie, w ~ / Sites, przy użyciu plików .htaccess. Mam 10.7.3 i nie dotknąłem żadnych plików konfiguracyjnych oprócz włączenia PHP w httpd.conf (co działa).

Wiem, że są tutaj co najmniej 2 pytania na ten temat, ale rozwiązania tam opisane nie działają. Podobnie jak inne rozwiązania, które znalazłem w sieci. Muszę robić coś głupiego lub coś przeoczyć, bo inaczej chyba wariuję, ale to nie działa.

Próbowałem wszystkich zwykłych rzeczy:

  1. W /private/etc/apache2/users/<myusername>.conf, zmiany AllowOverride Nonena AllowOverride Alli ponownie uruchomić serwer WWW

  2. Dodatkowo w /private/etc/apache2/httpd.confzmień dowolne / wszystkie wystąpienia (y) AllowOverride Nonedo AllowOverride All- Próbowałem go we wszystkich różnych miejscach, gdzie znajdują się te dyrektywy

  3. Wypróbuj w zasadzie wszystkie możliwe kombinacje wartości dla Optionslinii powyżej / poniżej AllowOverridelinii, w tym wartości:Indexes MultiViews FollowSymLinks All

Oczywiście zawsze restartuje serwer WWW po takiej zmianie. Nic z tego nie działa. Wszystkie moje czyste adresy URL po prostu nie działają; Dostaję 404 - nie znaleziono. Dziennik błędów Apache po prostu pokazuje mi błędy „Plik nie istnieje:”. Wygląda więc na to, że moduł mod_rewrite w ogóle nie działa.

Upewniłem się, że mod_rewrite jest załadowany do httpd.conf, którym jest; tak jest domyślnie w przypadku instalacji Lion.

Szaloną rzeczą jest to, że wszystko działało idealnie - dopóki nie przeprowadziłem migracji na nową maszynę z systemem Lion. Oznacza to, że wykluczam błąd w moich plikach .htaccess, ponieważ wiem, że wcześniej działał. Ponadto, jeśli byłby to błąd w .htaccess, dostałbym jakiś komunikat o błędzie z modułu mod_rewrite w dzienniku błędów Apache, przynajmniej mówiąc mi, że sam moduł jest wywoływany. Ale tak się nie dzieje.

Czy coś przeoczyłem? Czy muszę zmienić ustawienia konfiguracji w innym miejscu? Czy muszę zmienić konfigurację PHP? Dlaczego instrukcje (jak Jak aktywować mod_rewrite na MacOSX Lion i zmusić mod_rewrite do pracy na Mac OS X ) działają dla innych osób, ale nie dla mnie? :)

Zmarnowałem już godziny. Każda forma pomocy jest mile widziana.

Niels Heidenreich
źródło
BTW, nie chcę używać MAMP. Użyłem MAMP wcześniej i nie grało dobrze z MySQL, który jest już w moim systemie. To zastąpiłoby jeden ból głowy innym bólem głowy, więc nie, dziękuję :)
Niels Heidenreich
BTW Jestem na standardowym OS X Lion, NIE Lion Server.
Niels Heidenreich,
To nie odpowiada na pytanie, ale alternatywą do zmagania się z lokalnym środowiskiem Maca do robienia web dev jest użycie czegoś takiego jak Vagrant , który pozwala łatwo konfigurować i zarządzać konfiguracjami maszyn wirtualnych.
Dan J

Odpowiedzi:

12

Powinieneś upewnić się, że w /etc/apache2/users/username.conf masz następujące elementy:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Kluczowe są tutaj FollowSymlinks i AllowOverride. Podczas gdy wskazujesz na oba pytania, być może nie skonfigurowałeś ich poprawnie w tandemie.

Upewnij się, że w pliku httpd.conf /private/etc/apache2/extra/httpd-userdir.conf jest również uwzględniony. Jest to domyślnie.

Po wszelkich modyfikacjach uruchom ponownie serwer WWW, aby zmiany zostały wprowadzone.

Jeśli nadal masz problemy, być może istnieje problem z twoimi rzeczywistymi regułami przepisywania. Czy używasz ich również w kontekście .htaccess? Zauważ, że w .htaccess reguła przepisywania jest dopasowywana do identyfikatora URI żądania bez wiodącego ukośnika i zawsze względem katalogu, w którym znajduje się .htaccess , podczas gdy w globalnym httpd.conf identyfikator URI musi być zgodny z wiodącym ukośnikiem i jest względem katalogu głównego. Ponieważ zakładamy, że masz plik .htaccess w podkatalogu ~ / Sites, Twoje reguły przepisywania mogą zachowywać się inaczej niż wtedy, gdy plik .htaccess znajduje się w katalogu głównym (wirtualnego) hosta.

Aby debugować mod_rewrite, możesz włączyć rejestrowanie ponownego zapisu. Powinieneś włączyć to w /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log
Gerry
źródło
Dzięki Gerry. Tak, próbowałem tego; po prostu spróbowałem jeszcze raz; nie działa niestety Nie zmieniłem .htaccess, jest on w ~ / Sites /…, tak jak wcześniej. To jest zbyt frustrujące :(
Niels Heidenreich,
Spróbuj włączyć zapisywanie na nowo, tak jak to zmieniłem powyżej.
Gerry
OK, jak się wydaje, to wcale nie jest problem z mod_rewrite; jest to plik .htaccess, który jest całkowicie ignorowany. Mogę umieścić w nim wszelkie śmieci i nie otrzymuję komunikatu o błędzie. Więc Apache go nie ładuje. Sprawdziłem uprawnienia, są w porządku (plik można odczytać z całego świata). Próbowałem uczynić go wykonywalnym, bez zmian.
Niels Heidenreich
Jeśli umieszczę plik .htaccess w / Library / WebServer / Documents i otworzę „ localhost ”, aby go przetestować, działa to zgodnie z oczekiwaniami. Po prostu nie działa w „~ / Sites”.
Niels Heidenreich,
Zrobiłem coś szalonego i utworzyłem drugie konto użytkownika o nazwie logowania „testitester”. Ustawiam AllowOverride na Wszystkie w .conf tego użytkownika. Umieściłem plik .htaccess zawierający śmieci w folderze Witryny tego użytkownika. Jeśli przejdę do localhost / ~ testitester, otrzymam błąd 500, zgodnie z oczekiwaniami.
Niels Heidenreich
1

Dodawanie opcji + FollowSymLinks działało dobrze dla mnie

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule
Maseth
źródło
co to robi Options +FollowSymLinks? Po prostu dodaję tę linię, która mi odpowiada
Kannika,
1

Wystąpił podobny problem polegający na tym, że mój plik .htaccess był całkowicie ignorowany, gdy znajdowałem się w podfolderze w katalogu ~ / Sites pod poprawnie skonfigurowanym VirtualHost.

Po spędzeniu ostatniej godziny na zabawie z różnymi plikami konfiguracyjnymi i ustawianiu AllowOverride All w różnych miejscach, w końcu dowiedziałem się, że plik .htaccess, podczas gdy wyglądał jak plik .htaccess w Finderze, w rzeczywistości był plikiem .htaccess.txt z plikiem rozszerzenie ukryte.

Aby sprawdzić i zmienić plik .htaccess, kliknij go prawym przyciskiem myszy i wybierz polecenie Uzyskaj informacje, a następnie pamiętaj o usunięciu wiodącego rozszerzenia od końca, takiego jak to, które miałem:

A teraz to działa!

Jarada
źródło
1

Poniżej naprawiono wpisy .htaccess

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>
Charles J.
źródło
0

Umieszczenie .htaccess w / Library / WebServer / Documents i otwórz „localhost /”; aby to przetestować, działa zgodnie z oczekiwaniami. Po prostu nie działa w „~ / Sites”. Dzięki Niels Heidenreich za to!

Varun Bhatia
źródło
-1

Podczas wpisywania: / Users / username / app_name

/ Odnosi się do katalogu głównego serwera:

"Lokalny Gospodarz/"

Jeśli użyjesz / ~ nazwa użytkownika / nazwa_aplikacji podczas przepisywania, powinno to działać.

Bisteces
źródło
1
Ścieżki zaczynające się od /są zawsze ścieżkami bezwzględnymi dla Apache, patrz definicja katalogu głównego serwera WWW w http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside