Meine .htaccess
Datei enthält den folgenden Inhalt. Ich habe erwartet, dass sie zu meinem Projektordner weitergeleitet wird /hc
, der sich auf derselben Ebene wie befindet .htaccess
. Die Weiterleitung findet nicht statt und der Inhalt von wird weiterhin angezeigt index.html
.
RewriteEngine On
RewriteBase /hc/
<Files .*>
Order Deny,Allow
Deny From All
</Files>
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L,QSA]
Antwort1
Ich habe erwartet, dass es zu meinem Projektordner weiterleitet
/hc
.auf dem gleichen Niveau wie.htaccess
.
Das ist das Problem. Wenn sich die .htaccess
Datei im /hc
Unterverzeichnis befindet, wird sie die Anfrage nie sehen, es sei denn, Sie schließen das /hc
Unterverzeichnis bereits in die Anfrage ein.
Ihre .htaccess
Datei muss in das übergeordnete Verzeichnis, also in das Dokumentstammverzeichnis, verschoben werden. (Übrigens bräuchten Sie die RewriteBase /hc/
Anweisung nur, wenn sich die Datei im Dokumentstammverzeichnis befände.)
Oder fügen Sie einzusätzlich .htaccess
Datei im Dokumentstamm, die alle Anfragen einfach an Ihr /hc
Verzeichnis (Ihren Front-Controller) weiterleitet, zum Beispiel:
RewriteEngine On
RewriteRule (.*) hc/$1 [L]
Beachten Sie, dass mod_rewrite standardmäßig nicht übernommen wird. Sobald die Anforderung in das /hc
Unterverzeichnis umgeschrieben wurde, .htaccess
wird die Datei im Unterverzeichnis verarbeitet und überschreibt die mod_rewrite-Direktiven in der übergeordneten .htaccess
Datei. So entsteht keine Umschreibschleife.
RewriteRule .* index.php?/$0 [PT,L,QSA]
AKTUALISIEREN:DeinAuswechslungstring in der letzten RewriteRule
unterscheidet sich von der vorherigen Direktive. Beide sind wahrscheinlich nicht korrekt. Sie sollten das ?
in der obigen Direktive entfernen, es sei denn, Sie möchten die Abfragezeichenfolge verwenden. In diesem Fall sollten Sie ein ?
zur vorherigen Direktive hinzufügen. So wie es aussieht, verwendet die erstePfadinformationenum die URL zu übergeben, der zweite verwendet dieAbfragezeichenfolge.
Übrigens PT
ist das Flag in Verzeichnisdateien redundant .htaccess
. Und wenn Sie die Abfragezeichenfolge nicht verwenden, QSA
kann das Flag auch entfernt werden.
Antwort2
Sie müssen die Option „rewrite“ in Ihrer Apache-Konfigurationsdatei „sites-available“ zulassen. Bei Laravel sollten Sie vorsichtig sein, da sich Ihr DocumentRoot (öffentlicher Ordner, in dem Sie die .htaccess-Datei benötigen) im Projektordner befindet.