Codeigniter yolundaki "index.php" nasıl kaldırılır


Yanıtlar:


90

Apache kullanıyorsanız, kök web dizininize aşağıdakileri içeren bir .htaccess dosyası yerleştirin:

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

Başka bir iyi versiyon burada bulunur:

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


2
Bağlantı için +1! Yine de biraz ince ayar yapmak zorunda kaldı. bununla anladım -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind

Bazı nedenlerden dolayı, RewriteCond'un başlangıcına bir eğik çizgi eklemek zorunda kaldım. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry

Bazı nedenlerden dolayı, URL'de index.php varsa, aslında kaldırılmaz, orada kalır ve çalışmaya devam eder.
CMCDragonkai

1
Tüm olası kombinasyonları kullandım ve hala benim için çalışmıyor !!!!! nasıl çalıştırdın ??
Roshdy

Apache kurulumunuzun .htaccess dosyalarını kontrol edecek şekilde yapılandırılması gerekir - durumun böyle olduğundan emin olun.
Sean Vieira

60

İndex.php'yi kaldırırken bazı büyük sorunlar yaşadım. Genel bir kural olarak, aşağıdaki .htaccess birkaç sunucuda test edilmiştir ve genel olarak çalışır:

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

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

Bununla ilgili hiç şansınız yoksa, sonraki adım yapılandırma dosyanızı ayarlamaktır. Diğer URI protokollerinden bazılarını deneyin, örn.

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

Hala şansınız yoksa, alt klasörünüzü dahil etmek için yeniden yazma kuralını değiştirmeyi deneyin. Dev sunucusunda vb. Geçici bir URL kullanıyorsanız bu genellikle bir sorundur:

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

Sadece bu seçeneklerle oynayın, biri çalışmalı. Ayrıca, dizin dosyanızın şu şekilde ayarlandığından emin olun:

$config['index_page'] = '';

İyi şanslar!


Buradaki ilk kodunuzun benim için çözüm olduğunu düşünmüştüm ama aslında sadece domain / * gibi herhangi bir url'yi domain / index.php'ye gönderiyor, bu etki alanı / karşılama denetleyicisine hoş geldiniz göndermiyor. sonra bir saniye heyecanlandı. şimdi diğer önerileri denemek.
jsky

31

İndex.php dosyasıyla birlikte uygulamanın kök dizininde .htaccess dosyasını bulundurun. (Htaccess uzantısının doğru olup olmadığını kontrol edin, Bz htaccess.txt benim için çalışmadı.)

.Htaccess dosyasına aşağıdaki kuralları ekleyin,

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

Ardından application / config / config.php dosyanızda aşağıdaki satırı bulun

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

Değişkeni aşağıdaki gibi boş olarak ayarlayın.

$config['index_page'] = '';

İşte bu, benim için çalıştı.

Daha fazla işe yaramazsa, aşağıdaki değişkeni bu parametrelerle ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' ve 'ORIG_PATH_INFO') tek tek değiştirmeyi deneyin

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

3
teşekkür ederim, uzun zamandır bunda başarısız oluyorum bilmiyorum neden ama senin yolun tereyağı gibi çalıştı: D
Ahmed Samy

1
Teşekkürler MDeSilva. Bu gönderi zamanımı kurtarıyor.
sanji

1
Teşekkürler. Bu çalışıyor. BTW, config.php dosyasını değiştirmem gerekmiyor.
Stony

1
Teşekkürler, bu bana yardımcı oldu, PATH_INFO'yu WAMP ile kullandım
T.Coutlakis

21

system\application\config\config.phpDosyaya bir göz atın, adında bir değişken varindex_page

Böyle görünmeli

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

olarak değiştir

$config['index_page'] = "";

Daha sonra belirtildiği gibi, .htaccessdosyaya bir yeniden yazma kuralı eklemeniz gerekir.

Not: CodeIgniter v2'de bu dosya sistem klasöründen şuraya taşındı: application\config\config.php


9

Yukarıdaki tüm yöntemler benim için başarısız oldu ve sonra / etc / apache2 / sites-available / default adresindeki sanal ana bilgisayar dosyamda AllowOverride None olarak AllowOverride All olarak değiştirmediğimi fark ettim.

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

     ...


Çok teşekkür ederim, AllowOverride None da aldım, şimdi çalışıyor!
Willy

Blog artık yok ve onu okumayı çok isterdim. Bu çözümlerin hiçbiri benim için işe yaramıyor ...
Kevin Beal

harika, günümü kurtardım.
JChow

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

RewriteRule. * index.php / $ 0 [PT, L] 'yi "codeigniter" .its proje klasörü adıyla değiştirdikten sonra benim için çalışıyor. Desteğiniz için teşekkürler çocuklar.


6

Adım 1 => .htaccess dosyanızı, uygulama ve sistem klasörlerinin bulunduğu kök klasöre yerleştirin.

Adım 2 => Web yolunuz - alaniniz.com/project/ gibi bir alt klasör kullanıyorsanız, htaccess dosyasında aşağıdaki kodu kullanın

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

Kök klasörünü kullanan web yolunuz - alaniniz.com gibi - o zaman htaccess dosyasında aşağıdaki kodu kullanın

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

Yukarıdaki örneklerde ilk benim köküne sadece çalışır ancak formu yükleri vb hala bunu dışarı firugre eğer etrafta oynayacak URL'ler içinde index.php kullanmak ve bu geri gelmek için çalışacağız üzerinde kullanarak çalıştı
Sam

Teşekkürler @ Vinod Bu problemle çıldırıyordum.Çok uzun zamandır internette araştırıyordum, çeşitli çözümler denedim ama çözümünüzle karşılaşana kadar hiç çalışmadılar.Şimdi CI projem çalışıyor ve bana YENİ UMUT verdi CI ile devam etmek için. Çok teşekkürler :)
gomesh munda

5

Sadece ekleyebileceğimi düşündüm

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

htaccess olacaktır ve application / config.php değişkeninizi aşağıdaki şekilde düzenlediğinizden emin olun:

değiştirmek

$config['uri_protocol'] = AUTO 

ile

$config['uri_protocol'] = REQUEST_URI

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

Bu kesinlikle işe yaramalı .. bir dene


4

Etkinleştirdiğinizden emin olun mod_rewrite(ben yapmadım).
Etkinleştirmek:

sudo a2enmod rewrite  

Ayrıca, şununla değiştirin AllowOverride None:AllowOverride All

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

Sonda gelen ...

sudo /etc/init.d/apache2 restart  

.Htaccess

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

Etkinleştirmem gereken başka bir modül şuydu actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa

4

Mükemmel çözüm [hem yerel ana bilgisayarda hem de gerçek alanda test edilmiştir]

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

3

Bu, CI projelerimden biri için bir .htaccess:

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

Klasör yapınızın nasıl ayarlandığına bağlı olarak '/ projeKlasörü'ne ihtiyacınız olabilir veya olmayabilir, ancak son satır size ihtiyacınız olanı vermelidir. İyi şanslar!



3

Bir .htaccess dosyası olarak Kohana Framework tarafından sağlanan dosyayı kullanmak iyi bir seçenektir :

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

İşe yarayan iyi düşünülmüş bir .htaccess.


3

Codeigniter için url yolunda index.php'yi çözmenin iki yolu vardır

1: config / config.php'de Kodu değiştir:

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

için

$config['index_page'] = '';

2: Oluşturulmadıysa, kök yolunda .htacess oluşturun, Aşağıdaki kodu kopyalayın: -

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

Kaydedin ve ardından Apache Yapılandırması rewrite_module'unuzu kontrol edin VEYA mod_rewrite Etkinleştirildi. Değilse lütfen etkinleştirin. (En İyi Yaklaşım)!


Bu doğru ve doğrudan CodeIgniter belgelerinden alınmıştır. Ben de bu yöntemi kullanıyorum.
Dewald Els

2

Bunu apache2 üzerinde birçok farklı barındırmada test ettim ve harika çalışıyor.

bu htaccess'i kullan

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

emin olması gereken enabled mod_rewirtebir ilephpinfo();

sonra bunu config / config.php içinde yapın:

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

henüz çalışmazsa, 40/54 satırında $config['uri_protocol']='AUTO'listelenen application/config/config.phpdosyalardan birini değiştirmeyi deneyin :

bazen goDaddy barındırmaları REQUEST_URIyerine AUTOveya "QUERY_STRING"için kullandım


2

Bak \application\config\config.phpdosyanın adında bir değişken vardırindex_page

Böyle görünmeli

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

olarak değiştir

$config['index_page'] = "";

Daha sonra belirtildiği .htaccessgibi , dosyaya aşağıdaki gibi bir yeniden yazma kuralı eklemeniz gerekir :

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

Benim için çalışıyor, umarım sizde.


2

Linux üzerindeyseniz ve apache2 sunucusu kullanıyorsanız, .htaccess dosyasındaki değişikliklerin yanı sıra apache2.conf dosyasını da geçersiz kılmamız gerekebilir. /Etc/apache2/apache2.conf üzerinde apache2 yapılandırma dosyasını bulun .

Arama Dizini / var / www / AllowOverride None -> AllowOverride All

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

1

kök web dizininize bir .htaccess dosyası yerleştirin

Yaptığınız ince ayar ne olursa olsun - yukarıdakiler karşılanmazsa - işe yaramayacaktır. Genellikle Sistem klasöründe, kökte olması gerekir. Şerefe!


2
Birkaç saat geçirdikten sonra bunu okudum ve hatamı buldum.
mohsin.mr

Ben de bu "küçük" numara yüzünden en az bir saat geçirdim. Varsayılan olarak, .htaccess dosyaları applicationkök yerine dizinde gelir .
vadim

1

Birçok çözüm denedim ama bulduğum şey şu:

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]

Bu, gerektiği gibi index.php'yi url'den kaldıracaktır.



0

Bu, bu kodu .htacess dosyasındaki uygulama klasörüne yapıştırmanıza yardımcı olacaktır.

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>

0

Bu bana tam bir sihir yaptı:

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]

Umarım yardımcı olur!


0

Merhaba Bu beni çalıştı

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

bunun kadar iyi

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

burada, bu kod işaretleyici uygulaması bir alt alan adı olarak barındırılıyorsa, klasör alt klasörün adıdır, örneğin alanadı / klasör / indeks.php.

Umarım bu sizin için çalışır. Teşekkürler.


0

.Htaccess dosyanıza aşağıdaki kodu kopyalayın

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]

Bu kod soruyu yanıtlayabilirken, bu kodun soruyu neden ve / veya nasıl yanıtladığına ilişkin ek bağlam sağlamak , uzun vadeli değerini artırır.
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>

0

Aşama 1 :

Bunu htaccess dosyasına ekleyin

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

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

Adım 2 :

Codeigniter yapılandırmasında index.php dosyasını kaldırın

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

Aşama 3 :

Apache Yapılandırmasında (Komut) htaccess'in geçersiz kılınmasına izin ver

sudo nano /etc/apache2/apache2.conf ve dosyayı düzenleyin ve değiştirin

AllowOverride All

www klasörü için

4. Adım:

Etkin apache modu yeniden yazma (Komut)

sudo a2enmod yeniden yaz

Adım 5 :

Apache'yi yeniden başlatın (Komut)

sudo /etc/init.d/apache2 restart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.