Bagaimana menghapus "index.php" di jalur codeigniter

Jawaban:

90

Jika Anda menggunakan Apache, letakkan file .htaccess di direktori web root Anda yang berisi berikut ini:

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

Versi bagus lainnya ada di sini:

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

Sean Vieira
sumber
2
1 untuk tautannya! Meski harus sedikit tweak. mendapatkannya dengan ini -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind
untuk beberapa alasan, saya harus menambahkan garis miring ke awal RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry
Untuk beberapa alasan, jika Anda memiliki index.php di URL, itu tidak benar-benar dihapus, itu tetap di sana dan terus bekerja.
CMCDragonkai
1
Saya menggunakan semua kombinasi yang mungkin dan masih tidak berhasil untuk saya !!!!! bagaimana Anda membuatnya bekerja ??
Roshdy
Instal Apache Anda perlu dikonfigurasi untuk memeriksa file .htaccess - pastikan itu masalahnya.
Sean Vieira
60

Saya mengalami beberapa masalah besar dengan menghapus index.php. Sebagai aturan umum, .htaccess di bawah ini telah diuji di beberapa server dan biasanya berfungsi:

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

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

Jika Anda tidak beruntung dengan itu maka langkah selanjutnya adalah menyesuaikan file konfigurasi Anda. Coba beberapa protokol URI lainnya, misalnya

| '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';

Jika Anda masih belum berhasil, coba ubah aturan penulisan ulang untuk menyertakan subfolder Anda. Ini sering menjadi masalah jika Anda menggunakan URL sementara di server dev, dll:

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

Hanya bermain-main dengan opsi ini, salah satunya harus berfungsi. Selain itu, pastikan file indeks Anda disetel ke:

$config['index_page'] = '';

Semoga berhasil!

jimbo2087
sumber
Saya pikir kode pertama Anda di sini adalah solusi bagi saya tetapi sebenarnya itu hanya mengirim url seperti domain / * ke domain / index.php itu tidak mengirim domain / selamat datang ke pengontrol selamat datang. bersemangat sejenak. mencoba saran lain sekarang.
jsky
31

Miliki file.htaccess di direktori root aplikasi, bersama dengan file index.php. (Periksa apakah ekstensi htaccess sudah benar, Bz htaccess.txt tidak berfungsi untuk saya.)

Dan Tambahkan aturan berikut ke file .htaccess,

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

Kemudian temukan baris berikut di file application / config / config.php Anda

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

Atur variabel kosong seperti di bawah ini.

$config['index_page'] = '';

Itu saja, itu berhasil untuk saya.

Jika tidak berhasil, coba ganti variabel berikut dengan parameter ini ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI', dan 'ORIG_PATH_INFO') satu per satu

$config['uri_protocol'] = 'AUTO';
Shaolin
sumber
3
terima kasih, saya telah gagal dalam hal ini untuk waktu yang lama tidak tahu mengapa tetapi cara Anda bekerja seperti mentega: D
Ahmed Samy
1
Terima kasih MDeSilva. Posting ini menghemat waktu saya.
sanji
1
Terima kasih. Berhasil. BTW, saya tidak perlu mengubah config.php.
Stony
1
Terima kasih, yang ini membantu saya, saya menggunakan PATH_INFO dengan WAMP
T.Coutlakis
21

Coba lihat di system\application\config\config.phpfile tersebut, ada variabel bernamaindex_page

Seharusnya terlihat seperti ini

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

ubah menjadi

$config['index_page'] = "";

Kemudian seperti yang disebutkan, Anda juga perlu menambahkan aturan penulisan ulang ke .htaccessfile

Catatan: di CodeIgniter v2 file ini dipindahkan dari folder sistem ke application\config\config.php

Re0sless
sumber
9

Semua metode di atas gagal untuk saya dan kemudian saya menemukan bahwa saya tidak mengubah AllowOverride None menjadi AllowOverride All di file host virtual saya di / 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>

     ...

wakaf
sumber
Terima kasih banyak, saya juga mendapatkan AllowOverride None, sekarang berfungsi!
Willy
Blognya sekarang sudah tidak ada, dan saya sangat ingin membacanya. Tak satu pun dari solusi ini berhasil untuk saya ...
Kevin Beal
mengagumkan, menyelamatkan hariku.
JChow
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

setelah mengubah RewriteRule. * index.php / $ 0 [PT, L] dengan nama folder proyek "codeigniter". Ini bekerja untuk saya. Terima kasih teman-teman atas dukungan Anda.

Kapten Sparrow
sumber
6

Langkah 1 => Tempatkan file .htaccess Anda di folder root di mana folder aplikasi dan sistem berada.

Langkah 2 => Jika jalur web Anda menggunakan sub-folder seperti - domainanda.com/project/ - maka gunakan kode berikut di file htaccess

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

Jika jalur web Anda menggunakan folder root seperti - domainanda.com - maka gunakan kode berikut di file htaccess

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
vinod
sumber
Mencoba menggunakan yang pertama dari contoh di atas hanya berfungsi pada root saya tetapi tidak pada pemuatan formulir dll masih akan mencoba menggunakan index.php di url Saya akan bermain-main dan kembali ke ini jika saya dapat memecatnya
Sam
Terima kasih @ Vinod. Saya menjadi gila dengan masalah ini. Saya telah mencari di internet begitu lama, mencoba berbagai solusi tetapi tidak pernah berhasil sampai saya menemukan solusi Anda. Sekarang proyek CI saya berfungsi dan telah memberi saya HARAPAN BARU untuk melanjutkan dengan CI. Terima kasih banyak :)
gomesh munda
5

Hanya berpikir saya bisa menambahkan

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

akan menjadi .htaccess dan pastikan untuk mengedit variabel application / config.php Anda dengan cara berikut:

menggantikan

$config['uri_protocol'] = AUTO 

dengan

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

Ini pasti berhasil .. cobalah

Ramaraju.d
sumber
4

Pastikan Anda telah mengaktifkan mod_rewrite(saya belum).
Untuk mengaktifkan:

sudo a2enmod rewrite  

Selain itu, ganti AllowOverride NonedenganAllowOverride All

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

Akhirnya ...

sudo /etc/init.d/apache2 restart  

.Htaccess saya adalah

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
miguelitomp.dll
sumber
Modul lain yang perlu saya aktifkan adalah actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa
4

Solusi sempurna [diuji di localhost serta di domain nyata]

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

Ini adalah .htaccess untuk salah satu proyek CI saya:

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

Baris terakhir akan memberikan apa yang Anda butuhkan, meskipun Anda mungkin atau mungkin tidak memerlukan '/ projectFolder' tergantung pada bagaimana struktur folder Anda diatur. Semoga berhasil!

Matthew Rapati
sumber
3

Gunakan mod_rewriteseperti yang diinstruksikan dalam tutorial ini dari CI wiki.

Ben S
sumber
3

Sebagai file .htaccess, opsi yang bagus adalah menggunakan yang disediakan oleh Kohana Framework :

# 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]

Ini adalah .htaccess yang dipikirkan dengan baik dan berfungsi.

laurent
sumber
3

Ada dua cara untuk menyelesaikan index.php di jalur url untuk codeigniter

1: Di config / config.php Ubah kode:

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

untuk

$config['index_page'] = '';

2: Buat .htacess di jalur root jika tidak dibuat, Salin kode berikut: -

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

Simpan dan cek di Apache Configuration rewrite_module ATAU mod_rewrite is Enabled. Jika belum, silakan aktifkan. (Pendekatan Terbaik)!

Devraj Gupta
sumber
Ini benar dan langsung dari dokumen CodeIgniter. Saya juga menggunakan metode ini.
Dewald Els
2

Saya menguji ini di apache2 di banyak hosting yang berbeda dan berfungsi dengan baik.

gunakan htaccess ini

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

pastikan Anda memiliki enabled mod_rewirtedenganphpinfo();

lalu lakukan ini di 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';

jika belum berhasil, coba ubah $config['uri_protocol']='AUTO'ke salah satu application/config/config.phpfile di dalam yang tercantum di baris 40/54:

terkadang saya menggunakan: REQUEST_URIalih-alih AUTOatau "QUERY_STRING"untuk hosting goDaddy

ini aku
sumber
2

Lihat di \application\config\config.phpfile tersebut, ada variabel bernamaindex_page

Seharusnya terlihat seperti ini

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

ubah menjadi

$config['index_page'] = "";

Kemudian seperti yang disebutkan Anda juga perlu menambahkan aturan penulisan ulang ke .htaccessfile seperti ini:

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

Ini berhasil untuk saya, harap Anda juga.

pesawat peluncur
sumber
2

Jika Anda menggunakan linux dan menggunakan server apache2 maka kami mungkin perlu mengganti file apache2.conf juga di samping perubahan pada file .htaccess. Temukan file konfigurasi apache2 di /etc/apache2/apache2.conf .

Cari Direktori / var / www / Ubah AllowOverride Tidak Ada -> AllowOverride Semua

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory
rabin
sumber
1

tempatkan file .htaccess di direktori web root Anda

Apapun tweaker yang Anda lakukan - jika hal di atas tidak terpenuhi - itu tidak akan berhasil. Biasanya ada di folder Sistem, itu harus di root. Bersulang!

foxybagga.dll
sumber
2
Setelah menghabiskan beberapa jam, saya membaca ini dan menemukan kesalahan saya.
mohsin.mr
Saya juga menghabiskan setidaknya satu jam karena trik "kecil" ini. Secara default, file .htaccess ada di applicationdirektori, bukan di root.
vadim
1

Saya telah mencoba banyak solusi tetapi yang saya dapatkan adalah ini:

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]

Ini saya akan menghapus index.php dari url sesuai kebutuhan.

codegeek
sumber
0

Ini akan membantu Anda menempelkan kode ini di folder aplikasi di file .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
sumber
0

Yang ini membuatku benar-benar ajaib:

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]

Semoga membantu!

bmnepali.dll
sumber
0

Hai Yang satu ini berhasil

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

serta ini

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

dimana foldernya adalah nama subfolder jika aplikasi codeigniter ini di-host sebagai subdomain misal domainname / folder / index.php.

Harapan itu berhasil untuk Anda. Terima kasih.

menyalakan
sumber
0

Salin kode berikut di .htaccess Anda

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
sumber
Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan tersebut meningkatkan nilai jangka panjangnya.
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
sumber
0

Langkah 1 :

Tambahkan ini di file htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

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

Langkah 2 :

Hapus index.php di konfigurasi codeigniter

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

Langkah 3:

Izinkan penggantian htaccess di Apache Configuration (Command)

sudo nano /etc/apache2/apache2.conf dan edit file & ubah ke

AllowOverride All

untuk folder www

Langkah 4:

Penulisan ulang mod apache yang diaktifkan (Perintah)

sudo a2enmod menulis ulang

Langkah 5:

Mulai ulang Apache (Perintah)

sudo /etc/init.d/apache2 restart
Shashank Saxena
sumber