So entfernen Sie "index.php" im Pfad des Codeigniters

Antworten:

90

Wenn Sie Apache verwenden, legen Sie eine .htaccess-Datei in Ihrem Root-Webverzeichnis ab, die Folgendes enthält:

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

Eine weitere gute Version finden Sie hier:

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

Sean Vieira
quelle
2
+1 für den Link! Obwohl musste ein bisschen herum zwicken. habe es damit bekommen -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind
Aus irgendeinem Grund musste ich am Anfang der RewriteCond einen Schrägstrich einfügen. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry
Wenn Sie index.php in der URL haben, wird es aus irgendeinem Grund nicht entfernt, sondern bleibt dort und funktioniert weiter.
CMCDragonkai
1
Ich habe alle möglichen Kombinationen verwendet und es funktioniert immer noch nicht für mich !!!!! Wie hast du es zum Laufen gebracht?
Roshdy
Ihre Apache-Installation muss so konfiguriert sein, dass .htaccess-Dateien überprüft werden - stellen Sie sicher, dass dies der Fall ist.
Sean Vieira
60

Ich hatte einige große Probleme beim Entfernen der index.php. In der Regel wurde der folgende .htaccess auf mehreren Servern getestet und funktioniert im Allgemeinen:

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

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

Wenn Sie damit kein Glück haben, müssen Sie als Nächstes Ihre Konfigurationsdatei anpassen. Probieren Sie einige der anderen URI-Protokolle aus, z

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

Wenn Sie immer noch kein Glück haben, ändern Sie die Umschreiberegel, um Ihren Unterordner einzuschließen. Dies ist häufig ein Problem, wenn Sie eine temporäre URL auf einem Entwicklungsserver usw. verwenden:

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

Spielen Sie einfach mit diesen Optionen herum, man sollte arbeiten. Stellen Sie außerdem sicher, dass Ihre Indexdatei auf Folgendes eingestellt ist:

$config['index_page'] = '';

Viel Glück!

jimbo2087
quelle
Ich dachte, Ihr erster Code hier wäre die Lösung für mich, aber tatsächlich sendet er nur eine URL wie domain / * an domain / index.php. Er sendet keine Domain / Welcome an den Welcome Controller. war dann für eine Sekunde aufgeregt. Probieren Sie jetzt die anderen Vorschläge aus.
Jsky
31

Haben Sie die Datei.htaccess zusammen mit der Datei index.php im Anwendungsstammverzeichnis. (Überprüfen Sie, ob die htaccess-Erweiterung korrekt ist. Bz htaccess.txt hat bei mir nicht funktioniert.)

Fügen Sie der .htaccess-Datei die folgenden Regeln hinzu:

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

Suchen Sie dann die folgende Zeile in Ihrer Datei application / config / config.php

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

Setzen Sie die Variable wie folgt leer.

$config['index_page'] = '';

Das war's, es hat bei mir funktioniert.

Wenn es nicht weiter funktioniert, versuchen Sie, die folgende Variable nacheinander durch diese Parameter ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' und 'ORIG_PATH_INFO') zu ersetzen

$config['uri_protocol'] = 'AUTO';
Shaolin
quelle
3
danke, ich habe lange gescheitert, weiß nicht warum, aber dein Weg hat wie Butter funktioniert: D
Ahmed Samy
1
Danke MDeSilva. Dieser Beitrag spart mir Zeit.
Sanji
1
Vielen Dank. Es funktioniert. Übrigens muss ich config.php nicht ändern.
Stony
1
Danke, dieser hat mir geholfen, ich habe PATH_INFO mit WAMP
T.Coutlakis am
21

Schauen Sie sich die system\application\config\config.phpDatei an, es gibt eine Variable mit dem Namenindex_page

Es sollte so aussehen

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

ändere es auf

$config['index_page'] = "";

Dann müssen Sie, wie erwähnt, der .htaccessDatei auch eine Umschreiberegel hinzufügen

Hinweis: In CodeIgniter v2 wurde diese Datei aus dem Systemordner in verschoben application\config\config.php

Re0sless
quelle
9

Alle oben genannten Methoden sind für mich fehlgeschlagen, und dann habe ich festgestellt, dass ich AllowOverride None in AllowOverride All in meiner virtuellen Hostdatei unter / etc / apache2 / sites-available / default nicht geändert habe

<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
quelle
Vielen Dank, ich habe das AllowOverride None auch, jetzt funktioniert es!
Willy
Der Blog ist jetzt weg und ich hätte ihn sehr gerne gelesen. Keine dieser Lösungen funktioniert für mich ...
Kevin Beal
Super, hat mir den Tag gerettet.
JChow
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

Nach dem Ändern von RewriteRule. * index.php / $ 0 [PT, L] mit dem Projektordnernamen "codeigniter" .es funktioniert für mich. Danke Jungs für eure Unterstützung.

Captain Sparrow
quelle
6

Schritt 1 => Legen Sie Ihre .htaccess-Datei im Stammordner ab, in dem Anwendungs- und Systemordner vorhanden sind.

Schritt 2 => Wenn Ihr Webpfad einen Unterordner wie - yourdomain.com/project/ - verwendet, verwenden Sie den folgenden Code in der htaccess-Datei

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

Wenn Ihr Webpfad einen Stammordner wie - yourdomain.com - verwendet, verwenden Sie den folgenden Code in der htaccess-Datei

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Vinod
quelle
Der Versuch, das erste der obigen Beispiele zu verwenden, funktioniert nur auf meinem Stammverzeichnis, aber nicht beim Laden von Formularen usw. Ich werde weiterhin versuchen, index.php in URLs zu verwenden. Ich werde herumspielen und darauf zurückkommen, wenn ich es herausholen kann
Sam
Danke @ Vinod. Ich war verrückt nach diesem Problem. Ich habe so lange im Internet gesucht, verschiedene Lösungen ausprobiert, aber sie haben nie funktioniert, bis ich auf Ihre Lösung gestoßen bin. Jetzt funktioniert mein CI-Projekt und es hat mir NEUE HOFFNUNG gegeben mit CI weiterzumachen. Vielen Dank :)
Gomesh Munda
5

Ich dachte nur, ich könnte hinzufügen

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

wäre die .htaccess und stellen Sie sicher, dass Sie Ihre application / config.php-Variable auf folgende Weise bearbeiten:

ersetzen

$config['uri_protocol'] = AUTO 

mit

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

Das muss auf jeden Fall funktionieren. Probieren Sie es aus

Ramaraju.d
quelle
4

Stellen Sie sicher, dass Sie aktiviert haben mod_rewrite(ich hatte nicht).
Ermöglichen:

sudo a2enmod rewrite  

Ersetzen Sie auch AllowOverride NonedurchAllowOverride All

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

Endlich ...

sudo /etc/init.d/apache2 restart  

Mein .htaccess ist

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
miguelitomp
quelle
Ein weiteres Modul, das ich aktivieren musste, war actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa
4

Perfekte Lösung [sowohl auf localhost als auch auf real domain getestet]

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

Dies ist ein .htaccess für eines meiner CI-Projekte:

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

Die letzte Zeile sollte Ihnen das geben, was Sie brauchen, obwohl Sie möglicherweise '/ projectFolder' benötigen oder nicht, je nachdem, wie Ihre Ordnerstruktur eingerichtet ist. Viel Glück!

Matthew Rapati
quelle
3

Als .htaccess-Datei empfiehlt es sich, die vom Kohana Framework bereitgestellte zu verwenden :

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

Es ist ein gut durchdachter .htaccess, der einfach funktioniert.

Laurent
quelle
3

Es gibt zwei Möglichkeiten, index.php im URL-Pfad für Codeigniter zu lösen

1: In config / config.php Code ändern:

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

zu

$config['index_page'] = '';

2: Erstellen Sie .htacess im Stammpfad, falls nicht erstellt. Kopieren Sie den folgenden Code: -

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

Speichern Sie es und checken Sie dann Ihre Apache-Konfiguration ein. Rewrite_module ODER mod_rewrite ist aktiviert. Wenn nicht, aktivieren Sie es bitte. (Bester Ansatz)!

Devraj Gupta
quelle
Dies ist korrekt und direkt aus den CodeIgniter-Dokumenten. Ich benutze auch diese Methode.
Dewald Els
2

Ich habe dies auf Apache2 auf vielen verschiedenen Hosting getestet und es funktioniert großartig.

Verwenden Sie diesen Zugriff

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

Stellen Sie sicher, dass Sie enabled mod_rewirtemit einemphpinfo();

dann mach das in 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';

Wenn es noch nicht funktioniert, versuchen Sie, die Datei $config['uri_protocol']='AUTO'in eine der application/config/config.phpin Zeile 40/54 aufgeführten Dateien zu ändern:

manchmal habe ich verwendet: REQUEST_URIanstelle von AUTOoder "QUERY_STRING"für goDaddy-Hostings

da ich bin
quelle
2

Schauen Sie in die \application\config\config.phpDatei, es gibt eine Variable mit dem Namenindex_page

Es sollte so aussehen

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

ändere es auf

$config['index_page'] = "";

Dann müssen Sie, wie erwähnt, der .htaccessDatei auch eine Umschreiberegel wie folgt hinzufügen :

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

Es funktioniert für mich, hoffe du auch.

Segelflugzeug
quelle
2

Wenn Sie unter Linux arbeiten und den Apache2-Server verwenden, müssen wir möglicherweise die Datei apache2.conf neben den Änderungen an der .htaccess-Datei überschreiben. Suchen Sie die Apache2-Konfigurationsdatei unter /etc/apache2/apache2.conf .

Suchverzeichnis / var / www / Change AllowOverride None -> AllowOverride All

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

Platzieren Sie eine .htaccess-Datei in Ihrem Root-Webverzeichnis

Was auch immer Sie optimieren - wenn die oben genannten Bedingungen nicht erfüllt sind, funktioniert es nicht. Normalerweise befindet es sich im Systemordner im Stammverzeichnis. Prost!

Foxybagga
quelle
2
Nachdem ich ein paar Stunden verbracht hatte, las ich dies und fand meinen Fehler.
Mohsin.mr
Wegen dieses "kleinen" Tricks habe ich auch mindestens eine Stunde verbracht. Standardmäßig werden die .htaccess-Dateien im applicationVerzeichnis anstelle von root gespeichert .
Vadim
1

Ich habe viele Lösungen ausprobiert, aber die, die ich mir ausgedacht habe, ist folgende:

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]

Dadurch wird die index.php nach Bedarf aus der URL entfernt.

Codegeek
quelle
0

Auf diese Weise können Sie diesen Code in den Anwendungsordner in der .htacess-Datei einfügen

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

Dieser hat mir die komplette Magie gebracht:

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]

Ich hoffe es hilft!

bmnepali
quelle
0

Hallo, dieser hat mir geholfen

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

so gut wie das

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

Dabei ist der Ordner der Name des Unterordners, wenn diese Codeigniter-Anwendung als Unterdomäne gehostet wird, z. B. Domänenname / Ordner / Index.php.

Hoffe das funktioniert bei dir. Vielen Dank.

aufleuchten
quelle
0

Kopieren Sie den folgenden folgenden Code in Ihren .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
quelle
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
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
quelle
0

Schritt 1 :

Fügen Sie dies in die htaccess-Datei ein

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

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

Schritt 2 :

Entfernen Sie index.php in der Codeigniter-Konfiguration

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

Schritt 3 :

Überschreiben des Zugriffs in der Apache-Konfiguration zulassen (Befehl)

sudo nano /etc/apache2/apache2.conf und bearbeiten Sie die Datei und wechseln Sie zu

AllowOverride All

für www Ordner

Schritt 4 :

Apache Mod Rewrite aktiviert (Befehl)

sudo a2enmod umschreiben

Schritt 5:

Starten Sie Apache neu (Befehl)

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