Apache RewriteRule in htaccess – Routen sind defekt

Lesezeit: 3 Minuten

Benutzeravatar von Pmpr.ir
Pmpr.ir

Ich habe eine einfache Struktur:

Root
|-- [app] (Symfony Application)
|    |-- [app]
|    |-- [bin]
|    |-- [src]
|    |-- [vendor]
|    |-- [web]
|         |-- .htaccess (Symfony htaccess)
|
|-- [wp-admin]
|-- [wp-content]
|-- [wp-include]
|-- .htaccess (Root htaccess)

Ich brauche folgendes Mapping:

http://example.com      ==> WordPress 
http://example.com/app  ==> Symfony Application

Das habe ich:

Root-htaccess:

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

Symfony-htaccess:

DirectoryIndex app.php

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    RewriteRule ^ %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

Problem:

Das Problem ist, dass Symfony-Routen nicht aufgelöst werden:

Keine Route für “GET /” gefunden

Gibt es dafür eine einfache Lösung?

  • Gibt es Einschränkungen, was Sie ändern können? Zum Beispiel, wenn der Webhosting-Anbieter Ihnen keinen SSH-Zugriff gewährt oder Änderungen an der zugrunde liegenden Apache-Konfiguration oder -Modulen zulässt oder dass Sie die Verzeichnisstruktur Ihres Projekts nicht ändern können?

    – Adam Elsodaney

    21. Januar 2018 um 14:47 Uhr

  • Ich habe keinen Shell-Zugriff. Ich habe eine Lösung mit /web in URLs, aber ich möchte das mit einer einfachen Lösung loswerden. Ich ziehe es vor, die Verzeichnisstruktur von Symfony nicht aufzubrechen

    – Pmpr.ir

    21. Januar 2018 um 16:10 Uhr

  • Wenn Sie zumindest über ein Verwaltungstool verfügen, können Sie möglicherweise eine Subdomain auf den Webordner verweisen?

    – Yoshi

    22. Januar 2018 um 14:43 Uhr

Diese Lösung erfordert SSH-Zugriff.

Verzichten Sie auf alle Lösungen, die auf htaccess-Regeln basieren. Versuchen Sie stattdessen, einen symbolischen Link zu verwenden ln -s Befehl

Die beste Idee hier ist, jedes Projekt in einen separaten Ordner außerhalb des Ordners zu legen, auf den Ihre Domain zeigt (nennen wir es hier als public_html).

ROOT
|
-[Symfony]
-[WP]
-[public_html] (folder where your domain is pointing) 

und jetzt – entfernen Sie public_html – fügen Sie einen symbolischen Link zu wp hinzu (mit dem Namen des öffentlichen HTML) – schließen Sie wp ein, erstellen Sie einen symbolischen Link zu Symfony/Web

ROOT
|
-[Symfony]
-[WP]
-- [app]  (symbolic link to symfony/web)
-[public_html] (symbolic link to WP ) 

Als Alternative denke ich, dass es möglich ist, die Anfrage von Symfony an wp umzuleiten und dann die wp-Antwort an den Benutzer (von Symfony) zu senden. Ich habe solche Lösungen gesehen (es wird verwendet, wenn Sie eine neue App auf einem Legacy-System erstellen). Dies ist jedoch problematischer als ein symbolischer Link (Sie können die Idee hier sehen https://www.enotogorsk.ru/en/2014/07/22/symfony-legacy-bridge/)

  • Bitte verwenden Sie eindeutig die Standardverzeichnisstruktur (wie meine). Ich verstehe deine Notation nicht

    – Pmpr.ir

    23. Januar 2018 um 6:39 Uhr


1389790cookie-checkApache RewriteRule in htaccess – Routen sind defekt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy