2012-12-05 17 views
5

Mam 3 serwery, serwer apache typu localhost, test serwera zdalnego i serwer produkcyjny na żywo.Codeigniter, routing nie działa na serwerze produkcyjnym

Mam taką samą instalację kodu szyfrującego i ustawienia strony dla wszystkich 3 z nich, a routing serwerów lokalnych i serwerów testowych bez "index.php" działa w 100%. Jednak na serwerze produkcyjnym, bez względu na to, co pokazuje URL, wyświetlana jest tylko strona główna (za pośrednictwem domyślnego kontrolera), wydaje się, że wszystkie reguły routingu są ignorowane, z wyjątkiem domyślnego.

Jeśli jednak w adresie URL zostanie dodany index.php, będzie działał tak, jak powinien.

Na przykład, jeśli adres URL w zakładzie produkcyjnym to: "www.mysite.com/information", ładowana zawartość jest domyślnym kontrolerem.

Ale kiedy adres URL w zakładzie produkcyjnym to: "www.mysite.com/index.php/information", ładowana zawartość pochodzi od kontrolera "informacje".

Jest to zawartość mojego pliku htacess: http://pastebin.com/cDaZVJ8A

To jest moje trasy config file: http://pastebin.com/7Ewc2bwN

My $ config [ 'index_page'] jest ustawiona na nic.

Naprawdę nie wiem, dlaczego nie działa, to samo ustawienie na wszystkich serwerach pod kątem samego codeigniter, a mod_rewrite IS działa na serwerze produkcyjnym.

Nie wiem, co zrobić, jak mogę się dowiedzieć, co jest nie tak?

+0

Czy sprawdziłeś, czy 'routes.php' istnieje w katalogu' application/config/production'? Jeśli plik istnieje, zastąpi go w katalogu 'application/config'. – Stanley

+0

@Stanley, istnieje na serwerze produkcyjnym we właściwym miejscu. – Nicekiwi

+0

@Stanley, czekaj co? nie ma żadnych folderów w katalogu konfiguracyjnym? – Nicekiwi

Odpowiedz

6

Jest to dość powszechny problem, który często występuje, gdy ludzie przenoszą instalację kodu szyfrującego z jednego środowiska do drugiego. Nie mam pojęcia, dlaczego tak się dzieje, może być różnica w ustawieniach systemu operacyjnego lub apache serwera, ale rozwiązaniem często jest dodanie znaku zapytania o nazwie ? do RewriteRule dla pliku index.php w pliku .htaccess.

Stary:

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

Nowość:

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

Nigdy nie miałem tego problemu, ale dobrze jest znać możliwe rozwiązanie – m4t1t0

1

Sprawdź konfigurację wirtualnego hosta Apache i sprawdź, czy masz AllowOverride All w definicji katalogu.

+0

Nie mam do tego dostępu, jest to serwer współdzielony. – Nicekiwi

1
  1. Może coś jest nie tak z plikiem .htaccess?

    Kiedyś miałem problem z przeniesieniem aplikacji na serwer produkcyjny, ponieważ RewriteBase został ustawiony na jakiś katalog na serwerze programistycznym.

    Na mojej aplikacji do serwera produkcyjnego znajdował się katalog główny, więc RewriteBase powinien być /, a miałem tam /something.

  2. Kiedyś miałem głupi problem z górnymi/dolnymi skrzynkami, kiedy przeniosłem stronę z serwera programistycznego (Windows) do produkcji (Linux).

+0

Chciałbym, żeby było to łatwe, możesz zobaczyć mój plik htacess dla siebie z linku w pytaniu. Jest poprawna. – Nicekiwi

+0

Zobacz teraz @Ezra. Dodałem jeszcze jedną wskazówkę. – Kamil

0

miałem ten sam problem.Używałem funkcji do konwertowania nazw artykułów na URL (slugify).

Na serwerze lokalnym i serwerze funkcja ta zwróciła nieco inne adresy URL.

Powiązane problemy