2011-10-29 35 views
8

Mam projekt strony internetowej na moim MacBook Pro Leopard, a ja używam wbudowanego apache2 i php. Zrobiłem moje konfiguracje zarówno w httpd.conf, jak i user.conf, aby używać htaccess. Zmiany wprowadzane jak:.htaccess rewriterule nie działa poprawnie na Macu

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so 

<Directory > 
    AllowOverride All 
</Directory> 

Problem jest, gdy chcę otworzyć witrynę jak localhost/~ nazwa_użytkownika/miejscu/miejscu/index.php/powitalnym index.php wykonuje kilka operacji i znajdzie odpowiedniego kontrolera i właściwa strona.

Ale gdy próbuję wejść witryny jak strony/welcome Apache daje mi następujący błąd:

Not Found

Żądany URL Użytkownicy/nazwa_użytkownika/Miejsca/site/index.php/powitanie nie było znaleźć na tym serwerze.

Problem polega na tym, że apache pobiera to tak, jakby rzeczywiście był plikiem, a instrukcja błędu podaje go w systemie plików, ale to żądanie musi zostać pobrane do pliku index.php.

mój plik .htaccess wygląda tak

<ifModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L] 
</ifModule> 

Co denerwuje mnie, że ta konfiguracja działa zarówno na Linux i Windows, ale nie działa na Mac. Czuję skazane:)

+0

można potwierdzić moduł przepisywania został włączony poprawnie? – Phil

+0

tak, widzę je w załadowanej sekcji modułów phpinfo(); – LostMohican

+0

Czy rozważasz zmianę akceptowanej odpowiedzi? Ten, który zaakceptowałeś, jest w rzeczywistości niepoprawny. Odpowiedź @tong jest poprawna. – spikyjt

Odpowiedz

15

Poznałem ten sam problem zbyt! "DocumentRoot" nie działa dla mnie w Lion.

Ale to działa:

RewriteEngine On 

RewriteBase /~username/YOURPath 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L] 
+1

Fantastyczne! Spędziłem trzy godziny próbując to rozgryźć. Dzięki! –

+1

Mam do czynienia z tym samym problemem, ale to zaoszczędzić mój czas, więc +1 – imsyedahmed

+2

To powinna być zaakceptowana odpowiedź, ponieważ jest poprawna - RewriteBase powinien zawsze być ustawiony. Modyfikowanie DocumentRoot jest hackowaniem (i nie byłoby możliwe z .htaccess na dobrze skonfigurowanym serwerze). – spikyjt

4

Trzeba dodać następującą linię do pliku .htaccess:

DocumentRoot "/~username/site/" 
5

W systemie Mac OS X Mountain Lion, upewnij AllowOverride jest ustawiony na All w katalogu/

<Directory /> 
    Options FollowSymLinks 
    AllowOverride All 
    Order deny,allow 
    Deny from all 
</Directory> 

i katalog główny dokument ścieżce root:

<Directory "/Library/WebServer/Documents"> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
</Directory> 

również upewnij się, że FollowSymLinks jest zawarty w Options.

jeśli „index.php mniej ładna URL” nie ma na DocumentRoot następnie dodać następujący katalog RewriteBase na pliku .htaccess gdzie istnieje Twój index.php, jak w poniższym przykładzie:

RewriteBase /~username/site/site/ 

Jeśli chcesz zmienić nazwę pliku .htaccess do czegoś innego jak .acl lub htaccess.txt odkomentować następującą linię na httpd.conf

# Various default settings 
Include /private/etc/apache2/extra/httpd-default.conf 

i zmienić .htaccess w AccessFileName dyrektywy do wszystkiego, co lubisz w pliku extra/httpd-default.conf.Na przykład, jeśli chcesz zmienić .htaccess plik htaccess.txt go zmienić na:

AccessFileName htaccess.txt 

zapisać je ponownie uruchomić serwer Apache na OSX Mountain Lion, i nadzieję, że jesteś dobry, aby przejść. Mam nadzieję, że to pomoże.

2

prostu miałem ten sam problem, ale rozwiązania powyżej nie działa dla mnie,

Zdejmowanie ukośnik od początku nie załatwi (chyba, bo moja przeglądarka jest już uruchomiona pod prawidłowym użytkownikiem).

Więc RewriteRule^Rejestracja /register.php

Stał RewriteRule^zarejestrować register.php

który mnie prowadził orzechy! BTW używam xampp (apache 2) na Mac OS 10.8.

0

Jeśli umieściłem .htaccess w/Library/WebServer/Documents i otworzę "localhost /"; aby go przetestować, działa to zgodnie z oczekiwaniami. Po prostu nie działa w "~/Sites".

1

Miałem ten sam problem, ale dla mnie problem polegał na tym, że mod_rewrite nie został włączony.

miałem odkomentuj te dwie linie w pliku /etc/apache2/httpd.conf:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so 
LoadModule php7_module  libexec/apache2/libphp7.so 

Po tym nie było potrzeby korzystania RewriteBase itp

Powiązane problemy