Codeigniter ist nicht routing-Recht
Ich Apache installiert für Windows. Ich kaufte CodeIgniter Professional runtergeladen und den source code. Er sagte, dass ich sollte seine .htaccess in den root-Ordner der website also Tat ich es. Ich Basis-URL zu http://127.0.0.1/kids/, wo die Kinder ist der root-Ordner der website. Es zeigte mir die homepage ganz gut. Wenn ich auf einen link geklickt, es gibt immer die Fehlermeldung 404. Er sagte, "Die angeforderte URL /index.php/welcome/cat/2 wurde nicht auf diesem server." Ich habe versucht, mehrere Möglichkeiten an .htaccess in die Verzeichnisse ohne Erfolg. Im inneren des .htaccess, es weist:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|captcha|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Erklären, warum es nicht funktioniert? Ich habe auch überprüft configs.php und es scheint in Ordnung. config['index_page'] gesetzt ist leer. Ich entfernte die .htaccess-Datei und immer noch dasselbe problem, außer, dass es sagte, "Die angeforderte URL /kids/willkommen/cat/2 wurde nicht auf diesem server."
Stunden verschwendet zu versuchen, es zu arbeiten und ich verliere die Geduld.
Hier ist die Anleitung von Professional CodeIgniter:
", Um die Ordner zugänglich CodeIgniter, werden Sie auch brauchen, um zu erstellen ein kleines .htaccess-Datei im root-Ordner Ihrer Website. Hier ist, was das .htaccess-Datei Aussehen würde. Es enthält im Grunde Anweisungen, die allmvs bestimmte Dateien und Ordner angezeigt werden auf der web-site:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|captcha|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Wenn Sie sind vertraut mit mod_rewrite in Apache, beachten Sie, dass diese Regel angeblich entfernt index.php aus der URL, die von jedem Reiseziel. Unten, wenn Sie die Konfiguration von CodeIgniter (und vor allem die config.php Datei), werden Sie sehen, warum dies ist eine gute Idee. Wenn Sie nicht vertraut mit mod_rewrite in Apache, nicht zu eingeschüchtert von dieser Datei. Im Grunde, das .htaccess-Datei legt ein paar Regeln, von denen entfernt index.php aus allen URLs. Andere Regeln in der Datei erlauben die Verwendung von verschiedenen anderen Ordnern, die Sie benötigen, gehen weiter (wie Ordner enthalten, CSS, JavaScript, Captcha-Dateien und Bilder)."
Habe ich genau so angewiesen... setzen Sie die htaccess-Datei im root-Ordner, und doch, es gab 404 Fehler. Wenn ich entfernen htaccess-Datei aus dem root-Ordner, es zeigt die homepage. Wenn ich htaccess-Datei, gibt es 404-Fehler. Ich zog htaccess und es hat nicht alles tun, um re-route. Offensichtlich ist der Apache verstanden, die htaccess-sonst wäre es ja nicht der Fehler 404.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist möglich, dass Ihre Routen nicht korrekt aufgelöst, aber ich bin mir nicht sicher. Ich würde empfehlen, die folgenden Schritte.
Erste ist, würde ich einfach tun, Weg mit
PATH_INFO
für Ihre CodeIgniter-routing, da es nicht notwendig ist. Ändern Sie Ihre.htaccess
- Datei zu diesem:Dann, in Ihrer Konfiguration stellen Sie sicher, dass
$config['uri_protocol']
eingestellt istAUTO
(der Standard, glaube ich) oderREQUEST_URI
.Folgt, dass die wahrscheinlichste Ursache ist, dass Sie Ihre Routen erwartet, dass es ein trailing slash in der URL. Ich weiß nicht genug über CodeIgniter zu wissen, wo diese bestimmte Einstellung konfiguriert ist, aber Sie kann dazu führen, dass URLs eine trailing slash mit der folgenden Konfiguration in der Richtlinie:
Bearbeiten: Stellen Sie sicher, dass
mod_rewrite
arbeitet, wie gut. Versuchen Sie, diese an der Spitze Ihrer.htaccess
Datei, nach derRewriteEngine
Richtlinie:Wenn Sie umgeleitet, um Stack-Überlauf, zumindest werden wir wissen, dass das funktioniert. Wenn nicht, sind Sie nicht immer einen 500-Fehler, so würde das problem liegen mit der
.htaccess
- Datei, und in diesem Fall müssen Sie bestätigen, dass die entsprechenden<Directory>
Eintrag in der server-Konfiguration, wo Ihre Website befindet sich auf der Festplatte hatAllowOverride All
gesetzt.Bearbeiten: ich hätte es besser wissen müssen über den forward-slash, sorry. Das problem tritt auf, weil, wie
mod_rewrite
arbeitet in Ihrem pro-Verzeichnis (.htaccess
) Kontext.Einmal Ihre URL wird umgeschrieben, es wird untersucht, um festzustellen, was
mod_rewrite
tun sollte mit ihm. Wenn Ihre URL zeigt auf eine lokale Ressource und enthält ein führender Schrägstrich,mod_rewrite
lässt es wie es ist. Wenn es nicht, es fügt der pro-Verzeichnis-Präfix.Wenn es bleibt wie es ist, eine interne Weiterleitung an
/index.php
in diesem Fall wird davon ausgegangen, dass eine vollständig qualifizierte URL vom host (localhost). So, die Ressource angefordert endet alshttp://localhost/index.php
. Wenn die pro-Verzeichnis-Präfix Hinzugefügt wird, ein später Schritt in der rewrite-engine versucht zu entfernen, dieDocumentRoot
aus dem Weg, wenn es vorhanden ist. Dies lässt uns mit/kids/index.php
, die dann an den internen redirect, und wird wie erwartet aufgelöst.$config['index_page']
Leerstelle in Ihremconfig.php
- Datei? Auch, entfernen Sie den ersten Schrägstrich/index.php
im.htaccess
- Datei.Versuchen Sie dies:
Legen diese in den Ordner, in dem Kinder index.php ist.