2011-11-24 29 views
5

Zainstalowałem czysty serwer Apache2 (plus PHP & MySQL) i włączyłem mod_rewrite w konfiguracji apache. Dodałem plik .htaccess, aby usunąć plik index.php z adresu URL zgodnie z opisem w wiki CodeIgniter.Rewriterule dla CodeIgniter nie działa

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Umieściłem ten plik w katalogu głównym witryny.

Kiedy próbuję uzyskać dostęp do adresu URL mydomain.local/index.php/welcome, otrzymuję domyślną stronę CodeIgniter. Ale kiedy próbuję uzyskać dostęp do tej samej strony poprzez mydomain.local/welcome, wtedy dostaję stronę 404.

Jak mogę sprawdzić, czy działa cała reguła przepisywania? A dlaczego nie działa?

Odpowiedz

9

Znalazłem rozwiązanie. Plik htaccess nie mógł być uruchomiony przez konfigurację Apache. Tak więc musiałem ustawić flagę AllowOverride w katalogu na AllowOverride ALL.

Dzięki za pomoc!

+3

dzięki ... dokładnie rozwiązany mój problem – hforbess

0

trzeba usunąć index.php ze strony indeksu w pliku konfiguracyjnym

/application/config/config.php

$config['index_page'] = ''; 

Spróbuj tego .htaccess rzeczy, to co ja Korzystam:

RewriteEngine on 
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

może być również konieczne, aby umożliwić mod_rewite w ciebie apache config.

+0

Usunięto z pliku, ale nadal nie będzie działać. :( –

+0

Nie działa :(Czy nie ma sposobu sprawdzenia, czy cały plik .htaccess jest wykonywany? –

9

Zakładając, że konfiguracja (/application/config/config.php) ma index_page niepełnosprawnych:

$config['index_page'] = ''; 

A twój Apache DocumentRoot jest: /srv/www/

Utwórz plik na tym samym poziomie, co katalog /application/, z następującą treścią:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 

Należy zauważyć, że RewriteBase punkty do DocumentRoot (/). Jeśli index.php znajduje się w innym katalogu, należy odpowiednio zmienić wartość RewriteBase.

Dla struktury katalogów jak:

/srv/www/application/ 
/srv/www/system/ 
/srv/www/index.php 
/srv/www/.htaccess 

Twój RewriteBase powinno być: /

Dla struktury katalogów jak:

/srv/www/codeigniter/application/ 
/srv/www/codeigniter/system/ 
/srv/www/codeigniter/index.php 
/srv/www/codeigniter/.htaccess 

swojej RewriteBase powinny być : /codeigniter/

I tak dalej, otrzymujesz zdjęcie.

0

Spróbuj zmienić ustawienia konfiguracji uri_protocol. Ponadto niektóre serwery wymagają tej modyfikacji w pliku htaccess:

RewriteRule ^(.*)$ /index.php/?$1 [L] 

Znak zapytania po tym ostatnim ukośniku. Spróbuj tego.

Upewnij się także, że twój mod_rewrite jest włączony.

+0

Mod_rewrite jest włączony i ładowany na podstawie informacji phpinfo(), ale dodatek nie działa.Naprawdę zaczynam się zastanawiać, czy cały mod przepisywania działa ... –

+0

Hm, czy to jest przepisywanie NICZEGO? Zrób kilka testów, nawet poza CI, wtedy będziesz w stanie zlokalizować problem. – Shomz

1

Domyślnie .htaccess (od CI userguide http://ellislab.com/codeigniter/user-guide/general/urls.html)

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

mam mylić powyższy kod na chwilę, ale mam kod jak poniżej:

RewriteEngine on 
RewriteCond $1 !^(index\.php|robots\.txt|.*\.css|.*\.js|.*\.png) 
RewriteRule ^(.*)$ ./index.php/$1 [L] 

Na localhost należy dodać”./"przed index.php (trzecia linia), ponieważ w moim przypadku katalog ci nie został umieszczony w katalogu głównym. Myślę, że "./" oznacza, że ​​powinna to być ścieżka względna. Dla dodatkowego warunku ".*\.css|.*\.js|.*\.png", oznacza to, że apache nie powinien przepisywać pliku z rozszerzeniami css, js i png.

0

Jeśli natrafisz na 500 Internal Server Error. Pierwsze miejsce do wyszukiwania to plik Apache error.log. Dla mnie błąd był związany z poleceniem AddOutputFilterByType.

Nieprawidłowe polecenie „AddOutputFilterByType” może błędnie lub zdefiniowane przez moduł nie zawiera się w konfiguracji, serwer.

Dla mojej konfiguracji dwa moduły nie zostały włączone w konfiguracji apache, podczas gdy odpowiednie polecenia były używane w .htaccess. Więc po włączeniu filter_module i deflate_module wszystko wróciło do normy.

Powiązane problemy