it-swarm.com.de

Probleme mit CodeIgniter htaccess und URL umschreiben

Ich habe noch nie CodeIgniter verwendet, geschweige denn ein PHP-Framework, und ich dachte, ich würde es versuchen. Alles läuft gut, außer ich kann die index.php anscheinend nicht von der URL entfernen und trotzdem auf meine Seiten zugreifen. 

Ich habe die MVC-Struktur noch nie verwendet, also lerne ich von Anfang an. Vergib mir, wenn ich das falsch mache.

Ich versuche, auf eine von mir erstellte Ansicht namens 'about_page.php' zuzugreifen, indem ich einfach localhost/ci/about eingebe. Derzeit kann ich nur über localhost/ci/index.php/about darauf zugreifen.

Der Controller für die Seite ist: /application/controllers/about.php 
Das Modell für die Seite lautet: /application/models/about_model.php 
Und die Ansicht für die Seite ist: /application/views/about_page.php

Ich habe nach einer Lösung für dieses Problem gesucht, konnte aber keine finden. Hier habe ich schon gesucht:

CodeIgniter - Entfernen von index.php
Codeigniter - Wie entferne ich die index.php von der URL?
http://www.farinspace.com/codeigniter-htaccess-file/

CodeIgniter enthält eine .htaccess-Datei im Ordner 'application', die nur Allow Deny From All enthält. Also erstellte ich eine neue .htaccess-Datei im Stammverzeichnis http://localhost/ci/.htaccess und fügte diesen Code hinzu:

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

Wenn sich die .htaccess-Datei im Stammverzeichnis befindet, erhalte ich einen 500-internen Serverfehler. Wenn ich exakt dieselbe Datei in den Anwendungsordner kopiere, wird der 500-Fehler nicht mehr angezeigt. Ich kann jedoch immer noch nicht auf die About-Seite zugreifen, indem ich localhost/ci/about verwende.

Ich habe bereits $config['index_page'] = 'index.php'; in $config['index_page'] = ''; geändert UND ich habe versucht, $config['uri_protocol'] = 'AUTO'; in $config['uri_protocol'] = 'REQUEST_URI'; zu ändern, aber ich bekomme immer noch den internen Serverfehler.

Ich ging in die httpd.conf-Datei und entkommentierte das mod_rewrite.so-Modul, damit ich weiß, dass mod_rewrite aktiv ist.

Hat jemand eine Idee, warum das nicht funktioniert oder wie ich diese Arbeit bekommen kann? Ich weiß, dass es zu diesem Thema viele Fragen zu StackOverflow gibt, aber ich konnte keine finden, die meine Frage beantwortete. 

Mache ich das richtig? Sollte ich überhaupt in der Lage sein, auf die Info-Seite zuzugreifen, indem Sie localhost/ci/about besuchen, oder muss ich ein Info-Verzeichnis im Verzeichnis 'application' erstellen?

35
Ty Bailey

index.php muss in drei Schritten entfernt werden.

  1. Nehmen Sie unten in application/config.php Datei Änderungen vor

    $config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'AUTO';
    
  2. Erstellen Sie die .htaccess-Datei in Ihrem Stammverzeichnis unter Verwendung des folgenden Codes

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
  3. Aktivieren Sie das Überschreibungsmodul (falls noch nicht aktiviert). 

    ich. Initiiere es zuerst mit dem folgenden Befehl:

    a2enmod rewrite
    

    ii. Bearbeiten Sie die Datei /etc/Apache2/sites-enabled/000-default

    Ändern Sie alle AllowOverride None in AllowOverride All.

    Hinweis: In der neuesten Version müssen Sie die /etc/Apache2/Apache2.conf-Datei ändern

    iii. Starten Sie Ihren Server mit dem folgenden Befehl neu:

    Sudo /etc/init.d/Apache2 restart
    
69
Rahul Chipad

Ihr .htaccess ist etwas deaktiviert. Guck dir meins an:

 RewriteEngine On
 RewriteBase /codeigniter  

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
  RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]

Beachten Sie an zwei Stellen "Codeigniter".

danach in deiner config:

base_url = "http://localhost/codeigniter"
index = ""

Ändern Sie den Codeigniter nach Bedarf in "ci"

5
jmadsen
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /dmizone_bkp
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
   RewriteRule ^(.*)$ /dmizone_bkp/index.php?/$1 [L]
</IfModule> 
4
Vinilnbr

Das funktioniert für mich

Verschieben Sie die Datei .htaccess in den Stammordner (in meinem Fall vor dem Anwendungsordner suchen).

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

Meine config.php sieht so aus (application/config / config.php )

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

Lassen Sie mich wissen, ob es auch für Sie funktioniert! Prost !

2
William Kheng

Ich benutze so etwas - codeigniter-htaccess-file , es ist ein guter Artikel. 

  • belassen Sie die .htaccess-Datei im CI-Stammverzeichnis 
  • stellen Sie sicher, dass mod_rewrite eingeschaltet ist
  • auf Tippfehler prüfen (z. B. Controller-Datei/Klassenname)
  • in /application/config/config.php set $config['index_page'] = ""; 
  • in /application/config/routes.php setze deinen Standardcontroller $route['default_controller']="home";

Wenn Sie eine Neuinstallation von CI (2.1.3) ausführen, kann dies nicht unbedingt falsch sein.

  • 2 Konfigurationsdateien 
  • regler 
  • .zugang
  • mod_rewrite

lesen

2
Velja Matic

Folgen Sie für diese Benutzer des Wamp-Servers den ersten beiden Schritten der Lösung von @Raul Chipad:

  1. Klicken Sie auf das Wamp-Symbol (normalerweise in grün) und wählen Sie "Apache"> "Apache-Module"> "rewrite_module". Das "rewrite_module" sollte angekreuzt sein! Und dann geht es weiter!
1

Ich hatte ein ähnliches Problem unter Linux Ubuntu 14.

Nach ständigen 403 Fehlermeldungen im Browser und dem Lesen aller Antworten konnte ich nicht herausfinden, was falsch war.

Dann habe ich zum Fehlerprotokoll von Apache gegriffen und endlich einen Hinweis bekommen, der etwas unerwartet, aber absolut logisch war.

der Hauptordner von codeIgniter hatte keine X-Berechtigung für Ordner, die alles andere für den Webserver nicht lesbar machen.

chmod ugo + x IhrCodeIgniterFolder

erstes Problem behoben. 403 Fehler getötet.

Aber dann bekam ich Fehler 500. 

Täter war eine falsche Einstellungszeile in .htaccess 

Dann bekam ich PHP-Fehler.

Culprit hatte dasselbe Problem wie das X-Flag des Hauptordners für die Berechtigung "Andere" für innere Ordner in Anwendungs- und Systemordnern.

Meine zwei Cents für diese Frage: LESEN Sie Apache Error.log. 

Seien Sie sich jedoch auch der Sicherheit bewusst. CodeIgniter empfiehlt das Verschieben von Anwendungen und Systemordnern aus dem Webspace. Ändern Sie die Berechtigungen mit großer Sorgfalt, wenn diese Ordner im Webspace verbleiben.

Erwähnenswert ist auch, dass ich das heruntergeladene CodeIgniter-Archiv direkt in den Webspace entpackt habe. Ordnerberechtigungen werden wahrscheinlich direkt aus dem Archiv erstellt. Sie sind zwar sicher, aber Ordnerzugriffsprobleme (auf Unix-ähnlichen Systemen) werden nicht im CodeIgniter-Handbuch https://codeigniter.com/user_guide/installation/index.html erwähnt, und vielleicht wird es dort mit Richtlinien erwähnt Weitere Informationen dazu, wie Sie die Sicherheit für CodeIgniter lockern können, während die Sicherheit für das Produktionssystem streng ist (einige Sicherheitshinweise sind bereits im Handbuch enthalten, wie zuvor erwähnt).

1
ljgww

wenn nicht funktioniert

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

Ändern Sie es in

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

wenn nicht funktioniert, ändern Sie es in

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

wenn Sie dies verwenden

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

wenn die Weiterleitung oder der Header-Speicherort nicht in htaccess liegt, müssen Sie die URL in htaccess hinzufügen, um zu funktionieren

1

Standardmäßig befindet sich der folgende Ordner im Ordner application. Verschieben Sie ihn wie im Hauptverzeichnis vorgeschlagen.

leave the .htaccess file in CI root dir

0
Cyber

Fügen Sie dies einfach in die .htaccess-Datei ein:

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