Jak usunąć „index.php” ze ścieżki codeignitera

Odpowiedzi:

90

Jeśli używasz Apache, umieść plik .htaccess w swoim głównym katalogu internetowym, zawierający:

RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Tutaj znajduje się kolejna dobra wersja:

http://snipplr.com/view/5966/codeigniter-htaccess/

Sean Vieira
źródło
2
+1 dla linku! Chociaż musiałem trochę poprawić. rozumiem -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind
z jakiegoś powodu musiałem dodać ukośnik na początku RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry,
Z jakiegoś powodu, jeśli masz index.php w adresie URL, nie jest on faktycznie usuwany, pozostaje tam i nadal działa.
CMCDragonkai
1
Użyłem wszystkich możliwych kombinacji i nadal nie działa dla mnie !!!!! jak to się stało?
Roshdy
Twoja instalacja Apache musi być skonfigurowana do sprawdzania plików .htaccess - upewnij się, że tak jest.
Sean Vieira
60

Miałem duże problemy z usunięciem pliku index.php. Zasadniczo poniższy .htaccess został przetestowany na kilku serwerach i ogólnie działa:

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

<Files "index.php">
AcceptPathInfo On
</Files>  

Jeśli nie masz z tym szczęścia, następnym krokiem jest dostosowanie pliku konfiguracyjnego. Wypróbuj inne protokoły URI, np

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

   $config['uri_protocol']  = 'ORIG_PATH_INFO';

Jeśli nadal nie masz szczęścia, spróbuj zmienić regułę przepisywania, aby uwzględnić swój podfolder. Jest to często problem, jeśli używasz tymczasowego adresu URL na serwerze deweloperskim itp .:

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

Po prostu pobaw się tymi opcjami, powinno działać. Upewnij się również, że plik indeksu jest ustawiony na:

$config['index_page'] = '';

Powodzenia!

jimbo2087
źródło
Myślałem, że twój pierwszy kod tutaj był rozwiązaniem dla mnie, ale w rzeczywistości jest to po prostu wysłanie dowolnego adresu URL, takiego jak domain / * do domain / index.php, nie jest to wysłanie domain / welcome do kontrolera powitalnego. był podekscytowany przez sekundę. próbując teraz innych sugestii.
jsky
31

Umieść plik.htaccess w katalogu głównym aplikacji, razem z plikiem index.php. (Sprawdź, czy rozszerzenie htaccess jest poprawne, Bz htaccess.txt nie działa dla mnie.)

I dodaj poniższe reguły do ​​pliku .htaccess,

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

Następnie znajdź następujący wiersz w swoim pliku application / config / config.php

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

Ustaw zmienną jako pustą, jak poniżej.

$config['index_page'] = '';

To wszystko, na mnie zadziałało.

Jeśli to dalej nie zadziała, spróbuj zastąpić następującą zmienną tymi parametrami („AUTO”, „PATH_INFO”, „QUERY_STRING”, „REQUEST_URI” i „ORIG_PATH_INFO”) jeden po drugim

$config['uri_protocol'] = 'AUTO';
Shaolin
źródło
3
dziękuję, od dawna mi się to nie udaje, nie wiem dlaczego, ale wasza droga działała jak masło: D
Ahmed Samy
1
Dzięki MDeSilva. Ten post oszczędza mój czas.
sanji
1
Dzięki. To działa. BTW, nie muszę zmieniać config.php.
Stony
1
Dzięki, ten pomógł mi, użyłem PATH_INFO z WAMP
T.Coutlakis
21

Zajrzyj do system\application\config\config.phppliku, jest tam zmienna o nazwieindex_page

To powinno wyglądać tak

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

zmień to na

$config['index_page'] = "";

Następnie, jak wspomniano, musisz również dodać regułę przepisywania do .htaccesspliku

Uwaga: w CodeIgniter v2 ten plik został przeniesiony z folderu systemowego do application\config\config.php

Re0sless
źródło
9

Wszystkie powyższe metody zawiodły, a potem stwierdziłem, że nie zmieniam AllowOverride None na AllowOverride All w moim wirtualnym pliku hosta w / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All    <---- replace None with All
    </Directory>
    <Directory /var/www >
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All   <---  replace None with All
            Order allow,deny
            allow from all
    </Directory>

     ...

waqas
źródło
Dziękuję bardzo, mam też AllowOverride None, teraz działa!
Willy
Blog zniknął i bardzo bym chciał go przeczytać. Żadne z tych rozwiązań nie działa dla mnie ...
Kevin Beal
super, uratował mi dzień.
JChow
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

po zmianie RewriteRule. * index.php / $ 0 [PT, L] z nazwą folderu projektu „codeigniter”. działa dla mnie. Dzięki za wsparcie.

Kapitanie Sparrow
źródło
6

Krok 1 => Umieść plik .htaccess w folderze głównym, w którym istnieją foldery aplikacji i systemu.

Krok 2 => Jeśli Twoja ścieżka sieciowa za pomocą podfolderu, takiego jak - twoja_domena.com/project/ - użyj następującego kodu w pliku htaccess

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

Jeśli Twoja ścieżka sieciowa zawiera folder główny, taki jak - twoja_domena.com - użyj następującego kodu w pliku htaccess

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
vinod
źródło
Próbowałem użyć pierwszego z powyższych przykładów, działa tylko na moim katalogu głównym, ale nie na ładowaniu formularzy itp. Nadal będę próbował używać index.php w adresach URL. Będę się bawić i wrócę do tego, jeśli uda mi się to wyprostować
Sam
Dzięki @ Vinod, oszalałem na punkcie tego problemu, szukałem w sieci od tak dawna, próbowałem różnych rozwiązań, ale nigdy nie działały, dopóki nie znalazłem twojego rozwiązania.Teraz mój projekt CI działa i dał mi Nową NADZIEJĘ przejść dalej z CI. wielkie dzięki :)
gomesh munda
5

Pomyślałem, że mogę dodać

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

byłby .htaccess i pamiętaj, aby edytować zmienną application / config.php w następujący sposób:

zastąpić

$config['uri_protocol'] = AUTO 

z

$config['uri_protocol'] = REQUEST_URI
Jefkine Kafunah
źródło
5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

To zdecydowanie musi zadziałać ... spróbować

Ramaraju.d
źródło
4

Upewnij się, że masz włączone mod_rewrite(ja tego nie zrobiłem).
Umożliwić:

sudo a2enmod rewrite  

Zastąp AllowOverride NonerównieżAllowOverride All

sudo gedit /etc/apache2/sites-available/default  

Wreszcie ...

sudo /etc/init.d/apache2 restart  

Mój .htaccess to

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
miguelitomp
źródło
Kolejnym modułem, który musiałem włączyć, był actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa
4

Idealne rozwiązanie [testowane na hoście lokalnym, a także w prawdziwej domenie]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 
Abhishek Goel
źródło
3

To jest .htaccess dla jednego z moich projektów CI:

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

W ostatnim wierszu powinieneś znaleźć to, czego potrzebujesz, chociaż możesz potrzebować '/ projectFolder' 'lub nie, w zależności od konfiguracji twojej struktury folderów. Powodzenia!

Matthew Rapati
źródło
3

Jako plik .htaccess, dobrym rozwiązaniem jest użycie tego, który jest udostępniany przez platformę Kohana :

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

To dobrze przemyślany .htaccess, który po prostu działa.

laurent
źródło
3

Istnieją dwa sposoby rozwiązania index.php w ścieżce url dla codeigniter

1: W config / config.php Zmień kod:

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

do

$config['index_page'] = '';

2: Utwórz .htacess w ścieżce głównej, jeśli nie został utworzony, skopiuj następujący kod: -

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

Zapisz go, a następnie sprawdź w swojej konfiguracji Apache rewrite_module LUB mod_rewrite jest włączony, jeśli nie, włącz go. (Najlepsze podejście)!

Devraj Gupta
źródło
Jest to poprawne i prosto z dokumentacji CodeIgniter. Ja też używam tej metody.
Dewald Els
2

Przetestowałem to na Apache2 na wielu różnych hostingach i działa świetnie.

użyj tego htaccess

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

upewnij się, że masz enabled mod_rewirteplikphpinfo();

następnie zrób to w config / config.php:

$config['index_url']    = '';
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

jeśli to jeszcze nie działa, spróbuj zmienić na $config['uri_protocol']='AUTO'jeden z wymienionych w application/config/config.phppliku wewnętrznym w linii 40/54:

czasami używałem: REQUEST_URIzamiast AUTOlub "QUERY_STRING"dla hostingu goDaddy

to ja
źródło
2

Zajrzyj do \application\config\config.phppliku, jest tam zmienna o nazwieindex_page

To powinno wyglądać tak

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

zmień to na

$config['index_page'] = "";

Następnie, jak wspomniano, musisz również dodać regułę przepisywania do .htaccesspliku w następujący sposób:

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

To działa dla mnie, mam nadzieję, że ty też.

szybowiec
źródło
2

Jeśli jesteś na Linuksie i używasz serwera Apache2, może być konieczne zastąpienie pliku apache2.conf również obok zmian w pliku .htaccess. Znajdź plik konfiguracyjny Apache2 w /etc/apache2/apache2.conf .

Przeszukaj katalog / var / www / Change AllowOverride None -> AllowOverride All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory
rabin
źródło
1

umieść plik .htaccess w swoim głównym katalogu WWW

Jakiekolwiek poprawki, które robisz - jeśli powyższe nie zostaną spełnione - nie zadziała. Zwykle znajduje się w folderze System, powinien znajdować się w katalogu głównym. Twoje zdrowie!

foxybagga
źródło
2
Po kilku godzinach przeczytałem to i znalazłem swój błąd.
mohsin.mr
Spędziłem też co najmniej godzinę z powodu tej „małej” sztuczki. Domyślnie pliki .htaccess znajdują się w applicationkatalogu zamiast w katalogu głównym.
vadim,
1

Wypróbowałem wiele rozwiązań, ale wymyśliłem to:

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots  \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

W razie potrzeby spowoduje to usunięcie pliku index.php z adresu URL.

codegeek
źródło
0

Pomoże Ci to wkleić ten kod do folderu aplikacji w pliku .htacess

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

<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
  php_value short_open_tag 1
</IfModule>
Majid
źródło
0

Ten zrobił mi całą magię:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

Mam nadzieję, że to pomoże!

bmnepali
źródło
0

Cześć, ten pracował dla mnie

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

tak dobrze jak to

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

gdzie folder jest nazwą podfolderu, jeśli ta aplikacja kodująca jest hostowana jako subdomena, np. nazwa_domeny / folder / index.php.

Mam nadzieję, że to działa dla Ciebie. Dzięki.

zapalić
źródło
0

Skopiuj następujący kod w swoim .htaccess

RewriteEngine on
Options -Indexes
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
dev87
źródło
Chociaż ten kod może odpowiedzieć na pytanie, zapewnia dodatkowy kontekst dotyczący tego, dlaczego i / lub jak ten kod odpowiada, poprawia jego długoterminową wartość.
Benjamin W.
0
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Foldername of your ci/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
mohd jagir
źródło
0

Krok 1 :

Dodaj to w pliku htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php [QSA,L] 
</IfModule>

Krok 2 :

Usuń index.php w konfiguracji codeigniter

$config['base_url'] = ''; 
$config['index_page'] = '';

Krok 3 :

Zezwalaj na zastępowanie htaccess w konfiguracji Apache (polecenie)

sudo nano /etc/apache2/apache2.conf i edytuj plik i zmień go na

AllowOverride All

dla folderu www

Krok 4 :

Włączono przepisywanie modów Apache (polecenie)

sudo a2enmod przepisać

Krok 5:

Uruchom ponownie Apache (polecenie)

sudo /etc/init.d/apache2 restart
Shashank Saxena
źródło