Warum ist mein .htaccess-Datei Umleiten auf vollen Server-Pfad statt relativen Pfad?
-
23-09-2019 - |
Frage
Ich habe noch nie ein Problem mit CakePHP hatte, aber etwas ist seltsam zu diesem Server und verursache die Umleitungen in den .htaccess-Dateien seltsam verhalten.
mod_rewrite CakePHP Anwendungen in .htaccess-Dateien Anfragen an seine eigenen Webroot-Ordner zu umleiten. Das Problem ist, dass die Umleitungen den falschen Weg sind, das Auflisten und verursacht einen 404-Fehler. Meine CakePHP-Anwendung, die in dem Listings Verzeichnis gespeichert ist, hat eine .htaccess-Datei wie folgt:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [R=301,L]
RewriteRule (.*) app/webroot/$1 [R=301,L]
</IfModule>
(* Hinweis, dass die R = 301 bewirkt, dass eine externe Umleitung, damit wir sehen, was aus unserem Ende geht. Es ist wirklich dieses Flag weglassen sollte und tun, um die Umleitung intern transparent zu den Endnutzern)
Dies soll jede Anfrage von http://hostname.com/~username/listings/
zu http://hostname.com/~username/listings/app/webroot/
umleiten
Anstatt jedoch einfach den Zusatz „app/webroot/
“ bis zum Ende, wie es sollte, es fügt den vollständigen Serverpfad (/home/username/public_html/listings/app/webroot/
), die sich in der letzten URL http://hostname.com/home/username/public_html/listings/app/webroot/
, die offensichtlich falsch ist und lösen einen 404 Fehler.
Das Hosting ist auf einem Shared-Hosting-Konto, so dass Grenzen, was ich mit den Einstellungen zu tun. Ich habe noch nie das geschehen gesehen, und ich bin es etwas falsch von der Hosting-Seite der Dinge zu denken, aber wenn jemand ein paar hilfreichen Anregungen hat, dann kann ich sie an das Hosting-Unternehmen als auch setzen.
Lösung
Die Lösung für Ihre Frage kann in Richtung der Unterseite dieser gefunden werden http://example.com/~username/cakephp/ installieren ), oder jede andere URL-Struktur, dass mod_rewrite bereits nutzt, müssen Sie RewriteBase Rechnung an die .htaccess-Dateien CakePHP Anwendungen (/.htaccess, /app/.htaccess, /app/webroot/.htaccess) hinzuzufügen.
Ich habe auch CakePHP aus meinem Profil der public_html Ordner im Einsatz. Ich hatte 3 die gleichen .htaccess-Dateien oben erwähnt zu ändern. Fügen Sie einfach RewriteBase /~username/
auf die .htaccess-Dateien direkt nach RewriteEngine on
!
Andere Tipps
Versuchen Sie .htaccess aus Haupt-Datei zu entfernen ... Es funktionierte für mich
Es war recht einfach (uolhost Hostern mit):
Bearbeiten beide .htaccess-Dateien:
/webroot/.htaccess
/. .Htaccess
Fügen Sie die folgende Zeile: RewriteBase /
Hier ist die ganze /webroot/.htaccess-Datei:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]