it-swarm.com.de

301 Unterordner umleiten, aber die alte URL soll in der Adressleiste bleiben

Ich leite einen Unterordner von www.example.com nach www.example.com/folder um

Hier ist mein .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_Host} example.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ http://www.example.com/website/index.php [R=301,NC]
</IfModule>

Abgesehen von einer Sache, funktioniert dies zu 95%.

Die Stamm-URL leitet zum Unterordner /website weiter. Sowohl www.example.com als auch example.com werden aufgelöst und umgeleitet. Und www wird example.com/website vorangestellt.

Das Letzte, was ich tun möchte, ist, die URL im Browserfenster zu belassen. Wenn ein Benutzer auf ein Lesezeichen klickt oder (www)example.com eingibt, wird der visuell bereitgestellte Inhalt aus dem umgeleiteten index.php, aber in der Adressleiste des Browsers angezeigt sie sehen immer noch www.example.com.

2
Mandrin

Um dieselbe URL in der Adressleiste zu behalten, benötigen Sie ein internes Umschreiben im Gegensatz zu einem externes Umleiten (das ist das R=301 -Bit).

Versuchen Sie stattdessen Folgendes:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.com$ [NC]
RewriteRule ^$ website/index.php [L]

Beachten Sie, dass das R -Flag aus dem RewriteRule entfernt wird und das Substitution jetzt relativ und nicht absolut ist. (Ein absoluter URL-Pfad würde implizit eine Umleitung auslösen.)

In dem von Ihnen veröffentlichten Code ist die Anweisung RewriteBase nicht erforderlich. Weder ist die zweite RewriteCond Direktive, die gegen REQUEST_URI prüft - Ich habe die URL-Prüfung stattdessen auf RewriteRuleMuster verschoben, was effizienter ist. Das Flag NC (nocase) ist in diesem Fall auch für RewriteRule nicht erforderlich.

Sofern Sie nicht mehrere Domains in Ihrem Konto haben, ist auch die erste Anweisung RewriteCond, die mit HTTP_Host prüft, nicht erforderlich.

Und wenn dies nicht ohne installiertes mod_rewrite funktionieren soll, sollten Sie auch den Wrapper <IfModule> entfernen.

Stellen Sie vor dem Testen sicher, dass Sie den Browser-Cache leeren, da die vorherige 301-Umleitung zwischengespeichert wurde.

Beachten Sie, dass dies ein einmaliges Umschreiben von www.example.com/ nach www.example.com/website/index.php ist. Jede andere URL wird nicht umgeschrieben/umgeleitet. Interne Links müssen daher die tatsächlichen root-relativen (oder absoluten) URLs enthalten.

2
MrWhite