2012-04-12 12 views
2

Probleme bei der Konfiguration von CakePhp auf einem Apache-Server. Es hat in meiner Entwicklungsumgebung funktioniert, und jetzt möchte ich es bereitstellen.CakePhp 2.0 .htaccess

wird die URL wie folgt aussehen:

"http://www.example.com/mysite/" 

Eine Probe Controller-Aktion wäre:

"http://www.example.com/mysite/users/login" 

die Standard .htaccess-Dateien verwenden scheint nicht zu funktionieren.

mod_rewrite wird laut phpInfo geladen und URLs werden neu geschrieben, aber es sieht/mysite/als Controller. Hier ist die Ausgabe und meine .htaccess-Dateien

Missing Controller 

Error: MysiteController could not be found. 

Error: Create the class MysiteController below in file: >app/Controller/MysiteController.php 

root:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

App:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 

Webroot:

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

Soll ich ändern suchen nach meine .htaccess Datei s oder meine CakePhp-Konfigurationsdatei? Ich habe ein paar verschiedene RewriteBases ausprobiert, aber nur verschiedene Fehler bekommen.

Edit: Der Server läuft php-cgi und es scheint, dass alle meine Links in ein cgi-bin geschrieben werden. Zum Beispiel:

$this->Html->meta('icon'); 

schreibt den Pfad „/cgi-bin/cgiwrap/w3u_mysite/mysite/favicon.ico“ Jede Idee, wo oder warum dies geschehen könnte?

+0

Was ist falsch bei der vollständigen Verwendung der Domäne? (Ohne den mysite-Teil?) können Sie immer Subdomains verwenden, wenn Sie die Domain für mehrere Apps verwenden möchten. – mark

+0

Das ist der Webspace, den ich von meinem Host bekommen habe, ich kann nicht die ganze Domain benutzen – seelmobile

Antwort

3

Wie in meinem bearbeiten vermutet wird, wurde das Problem auf die im Zusammenhang Server läuft cgi php. Ich bin nicht genau sicher, was das Problem war, aber die CakePhp Google-Gruppe bietet diese Lösung:

In app/Config/core.php gibt es eine auskommentierte Definition für App.baseUrl. Kommentar- es und ersetzen Sie mit folgendem

Configure::write('App.baseUrl', '/mysite/'); 

Darüber gibt es Kommentare, die .htaccess-Dateien zu entfernen, zu sagen, die Sie ignorieren sollten. Die Seite funktionierte gut mit den .htaccess-Dateien als Standardwerte, keine RewriteBase benötigt. Der einzige Ärger war, dass die Funktionen $this->Html->css() und $this->Html->js() nicht funktionierten, aber ich rufe sie nur in Templates an, also ist es nicht schrecklich, sie hart zu codieren.

Wenn jemand Einblick in die Ursache dieser CGI Leiden, bitte teilen. Es fühlt sich immer noch ein wenig wie ein Klotz an, wenn ich nicht alle Html-Helfer benutzen kann.

0

Sie möchten Rewritebase /mysite/ hinzufügen (möglicherweise mit '/ mysite' zitiert oder ohne den zweiten Schrägstrich, Sie müssen versuchen) zu Ihrem .htaccesses, so mod Umschreiben wird den Ordner berücksichtigen.


Haben Sie Sie für korrekten Pfade webroot/index.php Datei überprüft? Als letzten Ausweg vielleicht "mysite" in den Routen herausfiltern?


Schluss Vorschlag: prepend mysite/-app in Ihrem RewriteRules.

+0

Alle Kombinationen des ersten Vorschlags funktionierten nicht, einige machten keinen Unterschied, andere erzeugten einen internen Serverfehler. Ich denke, dass die index.php richtig konfiguriert ist, aber es verwendet die Standardeinstellungen. Das Anpassen mit dem Stammpfad von phpInfo machte keinen Unterschied. Ich versuchte, das Routing in CakePhp zu ändern, und hatte interessante Ergebnisse. Ich glaube, dass die Domäne auch das Umschreiben verwendet, da ich mit einem CGI-Fehler zu einer alternativen URL weitergeleitet wurde. Der letzte Vorschlag führte zu einem internen Serverfehler. – seelmobile

+0

Mein Host hat ausdrücklich angegeben, dass AllowOverride für mein Verzeichnis nicht auf All, sondern auf eine Direktive gesetzt ist. Kann die RewriteBase nicht wie erwartet funktionieren? – seelmobile

+0

Ich habe hier einige Vorschläge ... Es gibt eine letzte Frage, wenn Sie RewriteBase verwendet haben, haben Sie es für alle .htaccess-Dateien verwendet? – Joep

0

Ich habe ähnliche Probleme mit einigen Servern. Lösung für mich war, den absoluten Pfad in allen .htaccess-Dateien zu benennen.

Etwas wie:

root:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ /mysite/app/webroot/ [L] 
    RewriteRule (.*) /mysite/app/webroot/$1 [L] 
</IfModule> 

App:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ /mysite/app/webroot/ [L] 
    RewriteRule (.*) /mysite/app/webroot/$1 [L] 
</IfModule> 

Webroot:

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