2011-07-20 13 views
6

Próbuję usunąć index.php z adresów URL CI, ale postępując zgodnie z instrukcjami, wydaje się, że nie działa.Używanie htaccess do usuwania codeigniter index.php w podkatalogu

Mam instalację codeigniter działającą w podkatalogu. W konfiguracji tras o nazwie main znajduje się domyślny kontroler, a inny kontroler nazywa się "create". Domyślnie działa dobrze, ale przejście do/utworzenia zwraca błąd 324, który oznacza brak danych odebranych. Moja htaccess wygląda następująco:

<IfModule mod_rewrite.c> 

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} ^system.* 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

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

</IfModule> 

<IfModule !mod_rewrite.c> 
    ErrorDocument 404 /index.php 
</IfModule> 
+0

Dane wyjściowe pliku apache error.log mogą być pomocne w rozwiązaniu problemu. – Marko

Odpowiedz

24

To powinno wystarczyć:

<IfModule mod_rewrite.c> 
RewriteEngine On 

#Checks to see if the user is attempting to access a valid file, 
#such as an image or css document, if this isn't true it sends the 
#request to index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#This last condition enables access to the images and css folders, and the robots.txt file 
RewriteCond $1 !^(index\.php|public|images|robots\.txt|css) 
RewriteRule ^(.*)$ index.php/$1 [L] 
</IfModule> 
+1

To działało świetnie. Dzięki! – Robin

+0

Zwycięzcą jest ... to. – dlopezgonzalez

+0

i nie zapomnij zmienić konfiguracji Apache'a, jak wspomniano w stackoverflow.com/a/14807463/1537413 – Dika

7

To jest to, czego używam. Moje CodeIgniter działa również w subdir.

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|swf|uploads|js|css|robots\.txt) 
RewriteRule ^(.*)$ /ci/index.php/$1 [L] 
+4

Szukałem odpowiedniego mod_rewrite godzinami i to jest ta, która w końcu dla mnie zadziałała! Wszystko, co musiałem zrobić, to zmienić 'ci /' na 'mysubfolder /' –

5

.htaccess add:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php/$0 [PT,L] 

Przejdź do aplikacji/config/config.php i jasne strony indeksu wartości config:

// Old 

$config['index_page'] = "index.php"; 

// New 

$config['index_page'] = ""; 

Rozwiązany Mój problem również nadzieję innym ... . :)

+0

próbuję kodu z podręcznika użytkownika codeigniter i nie działam, ale teraz jego działanie przypomina magię, dzięki, sir – Belajar

+0

To działało dla mnie, dzięki! – Robin

1

Czasami trzeba ją włączyć moduł przepisywania, uruchom "apache2 włączyć moduł rewrite":

sudo a2enmod rewrite 

Trzeba ponownie uruchomić serwer WWW, aby zastosować zmiany:

sudo service apache2 restart 

Następnie odpowiedź Sofii.