Cake php

derocco

Lt. Junior Grade
Registriert
Nov. 2015
Beiträge
337
ich habe ein problem mit einer cake php seite:

mit www.pc.ch geht alles -> redirect to \login

Aber ohne www.

->
CakePHP: the rapid development php framework


Missing Controller
Error: Controller could not be found.
Error: Create the class Controller below in file: app/Controller/Controller.php
<?php
class Controller extends AppController {

}

Notice: If you want to customize this error message, create app/View/Errors/missing_controller.ctp


auch schon gesehen: ERR_TOO_MANY_REDIRECTS

ideen?
 
Zuletzt bearbeitet:
Unabhängig von Cake:
Es ist eh nicht unbedingt best practice die domain mit und ohne www zu erlauben. Ich würde eher im Webserver eine von beiden auf das jeweils andere umleiten, damit löst du 2 Probleme mit einem Fix. SEO technisch ist das auch besser nur eine zuzulassen.
 
  • Gefällt mir
Reaktionen: rocketworm
Mihawk90 schrieb:
Unabhängig von Cake:
Es ist eh nicht unbedingt best practice die domain mit und ohne www zu erlauben. Ich würde eher im Webserver eine von beiden auf das jeweils andere umleiten, damit löst du 2 Probleme mit einem Fix. SEO technisch ist das auch besser nur eine zuzulassen.
Okay klingt einleuchten aber wie stelle ich das an?
ich glaube auf dem Hosting sind beide auf den gleichen Ordner gemappt.
 
Mit einem HTTP Redirect den du im Webserver einstellen kannst. Ich würde dir an der Stelle mal HTML5Boilerplate empfehlen. Dort werden die immer jeweils aktuellen best practices gesammelt und die Dokumentation ist umfangreich.

Für Apache:
https://github.com/h5bp/server-configs-apache/blob/master/dist/.htaccess#L380

Für Nginx:
https://github.com/h5bp/server-configs-nginx/blob/master/conf.d/templates/example.com.conf#L9
edit:
Das Beispiel bezieht sich allerdings auf www zu non-www. Da du es allerdings anscheinend andersrum benötigst müsstest du die Zeilen entsprechend anpassen, das Prinzip ist aber das gleiche.

Und hier das Repo für HTML5Bp allgemein:
https://github.com/h5bp/html5-boilerplate



Um übrigens mal auf die ursprüngliche Frage einzugehen:
Ich habe Cake PHP nie genutzt, aber der Fehlermeldung zu urteilen würde ich mal vermuten, dass Cake für jede Domain einen eigenen Controller möchte. Einen für die "Domain" example.com und einen für die "Domain" www.example.com. Zwar hast du nur eine Domain bei deinem Registrar, aber ich vermute mal stark, dass Cake das www. als Subdomain identifiziert und dementsprechend einen Controller braucht (du könntest ja rein theoretisch dort auch ganz anderen Content haben).
 
Zuletzt bearbeitet:
Das Problem ist wohl, dass da schon rewrite rules definiert sind:


RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]

Ich bräuchte ja noch dazu
RewriteCond %{HTTP_HOST} ^pc.ch
RewriteRule (.*) https://www.pc.ch/$1 [R=301,L]

scheint sich zu beissen...
 
Ja, natürlich ist nicht alles copy&paste, muss eben an die eigenen Bedürfnisse angepasst werden ;)
Ergänzung ()

Ich weiß nicht wieso sich das beißen soll. Die sollten doch kombinierbar sein, da sie sich ja auch auf verschiedene Dinge beziehen. Du kannst auch mehrere rewrite rules ausführen lassen, darf halt nur kein [L] verwendet werden, weil die RewriteEngine sonst abbricht.

Du kannst ja zum Beispiel zuerst die untere Regel nehmen (dann natürlich ohne ,L), und danach die bereits bestehende, dann sollte zuerst auf www umgeleitet werden und dann deine alte Regel angewandt.

Andererseits kenne ich wie gesagt leider die Eigenheiten von Cake PHP nicht, daher kann ich da nicht wirklich viel helfen.
 
Zuletzt bearbeitet:
Ich würde zudem zusehen, dass auf https redirected wird und du ein SSL Zertifikat einbindest (z.B. Let's Encrypt). Vorher würde ich über die Formulare keine Daten verschicken wollen.
 
Ich kriegs damit auch nicht hin.
Im Firefox klappts aber IE zb ignoriert es.


/**
* Get CakePHP's root directory
*/
define('APP_DIR', 'app');
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(FILE));
define('WEBROOT_DIR', 'webroot');
define('WWW_ROOT', ROOT . DS . APP_DIR . DS . WEBROOT_DIR . DS);

/**
* This only needs to be changed if the "cake" directory is located
* outside of the distributed structure.
* Full path to the directory containing "cake". Do not add trailing directory separator
*/
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');
}

require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';

Das ist im root im Index.

Das Problem liegt wohl irgendwie daran, dass er dann in den webroot einsteigt von da aus.
 
derocco schrieb:
Im Firefox klappts aber IE zb ignoriert es.
Klingt dann aber eher nach einem Cache-Problem wenn es in einem geht, im anderen nicht.
Check mal in den IE Dev Tools (F12) was du bei der Anfrage zurückkriegst.
 
Zurück
Oben