Apache Rewrite Engine leitet alle Anfragen an index.php weiter

Apache Rewrite Engine leitet alle Anfragen an index.php weiter

Ich habe eine PHP-Webanwendung auf einem Apache-Webserver.

Der Pfad zur Webanwendung auf dem Server lautet:/var/www/html/intern/organisation/example_app

Die URL zur Webanwendung lautet:
https://www.example.de/org1/intern/example_app/

Ich möchte, dass alle Anfragen, z.B. https://www.example.de/org1/intern/example_app/view1/weitergeleitet werden an

https://www.example.de/org1/intern/example_app/index.php

Auf meinem lokalen XAMPP-Server verwende ich die folgende .htaccess-Datei, die für diesen Zweck funktioniert:

RewriteEngine On
RewriteBase /example_app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]

Ich habe aber keine Ahnung, wie diese Datei auf dem Server aussehen soll? Ich verwende auch eine httpd.conf auf dem Server. Ich frage mich, ob diese Datei mit der .htaccessDatei, die unten liegt, in Konflikt steht:/var/www/html/intern/organisation/example_app/

Hat jemand eine Idee, wie das Umschreiben auf dem Server konfiguriert werden kann?

Antwort1

Die .htaccessDatei im /org1/intern/example_app/Unterverzeichnis sollte folgendermaßen aussehen:

DirectoryIndex index.php

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

Sie können dann dieselbe .htaccessDatei lokal und auf dem Live-Server verwenden, vorausgesetzt, sie befindet sich im example_app/Unterverzeichnis.

Vorausgesetzt, die .htaccessDatei befindet sich im selben Verzeichnis wie die index.phpDatei, in die Sie umschreiben möchten, brauchen Sie die RewriteBaseAnweisung nicht.

Die Direktive ist wahrscheinlich bereits in der Serverkonfiguration DirectoryIndexfestgelegt , daher ist sie hier möglicherweise nicht erforderlich, der Vollständigkeit halber sollte sie jedoch aufgenommen werden. Sie ist erforderlich, wenn das Anwendungsverzeichnis selbst angefordert wird (z. B. ).index.phphttps://www.example.de/org1/intern/example_app/

Beachten Sie, dass dies eine „interne Umleitung“ ist, die häufiger als „Umschreiben“ bezeichnet wird. Wenn Sie einfach „Umleitung“ sagen, bedeutet dies eine „externe (HTTP-)Umleitung“, was etwas völlig anderes ist.


Ich frage mich, ob diese Datei mit dem .htaccess fileunten stehenden kollidiert:/var/www/html/intern/organisation/example_app/

Mehrere .htaccessDateien (und die Serverkonfiguration) können in Konflikt geraten. Allerdings können mod_rewrite-Direktiven in einer untergeordneten Konfiguration (im selbenKontext, dh.Verzeichnis) überschreibt mod_rewrite-Direktiven in der übergeordneten Konfiguration vollständig (standardmäßig).


Beiseite:(oder möglicherweise auch nicht)

Der Pfad zur Webanwendung auf dem Server lautet:/var/www/html/intern/organisation/example_app

Die URL zur Webanwendung lautet:https://www.example.de/org1/intern/example_app/

Etwas verwirrend ist allerdings, dass der Dateipfad und der URL-Pfad nicht übereinstimmen. Hast du Aliasin der Serverkonfiguration zusätzliche Umschreibungen oder Konfigurationen vorgenommen oder befindet sich example_appim Dateipfad ein anderes Verzeichnis als example_appim URL-Pfad?

Antwort2

Vielen Dank für die ausführlichen Antworten. Die Rewriting Rules waren nicht das Problem.

Das Problem war einfach. Die ganze .htaccess funktionierte nicht, weil ich AllowOveride in der httpd.conf aktivieren musste.

verwandte Informationen