it-swarm.com.de

.htaccess umschreiben, um die Stamm-URL in ein Unterverzeichnis umzuleiten

Versuchen zu bekommen

www.example.com

direkt zu gehen

www.example.com/store

Ich habe mehrere Codebits ausprobiert und keiner funktioniert.

Was ich probiert habe:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_Host} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_Host} ^(.+)\www.example\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

Was mache ich falsch?

226
AlphaSmith

Sie können eine Umschreibungsregel verwenden, die ^ $ verwendet, um den Stamm darzustellen und diesen in Ihr/store-Verzeichnis umzuschreiben.

RewriteEngine On
RewriteRule ^$ /store [L]
255
Sander

Ich war überrascht, dass niemand dies erwähnte:

RedirectMatch ^/$ /store/

Grundsätzlich wird der Stamm und nur die Stamm-URL umgeleitet .. Die Antwort stammt von this link

122
Dio Phung

Versuche dies:

RewriteEngine on
RewriteCond %{HTTP_Host} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^$ store [L]

Wenn Sie eine externe Weiterleitung wünschen (wodurch der Besuchsbrowser die umgeleitete URL anzeigt), setzen Sie auch dort das Flag R:

RewriteRule ^$ /store [L,R=301]
104
Gumbo

Hier habe ich zu einem Unterverzeichnis umgeleitet. Dies hat es unsichtbar gemacht und lässt dennoch Anforderungen zu, die mit einer vorhandenen Datei oder was auch immer übereinstimmen. 

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/$1
RewriteCond %{HTTP_Host} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]

Ändern Sie site.com und das Unterverzeichnis mit Ihren Werten. 

75
Jage

Um eine unsichtbare Umleitung vom Stamm zum Unterordner festzulegen, können Sie die folgende RewriteRule in /root/.htaccess verwenden:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]

Die obige Regel leitet den Browser intern um von:

zu

Und

zu

während der Browser im Stammordner bleibt.

21
starkeen

Eine weitere Alternative, wenn Sie die URL umschreiben und die ursprüngliche URL ausblenden möchten:

RewriteEngine on
RewriteRule ^(.*)$ /store/$1 [L]

Wenn Sie beispielsweise http://www.example.com/product.php?id=4 eingeben, wird die Datei transparent bei http://www.example.com/store/product.php?id=4 geöffnet, ohne jedoch dem Benutzer die vollständige URL anzuzeigen.

20
gaborous

Dies schien die einfachste Lösung zu sein:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

Ich habe Umleitungsschleifen mit einigen anderen Lösungen erhalten. 

13
user1801050

Ich verstehe deine Frage nicht ...

Wenn Sie jede Anfrage in einen Unterordner umleiten möchten:

RewriteRule ^(.*)$ shop/$1 [L,QSA]

http://www.example.com/* -> wwwroot/store/*

Wenn Sie in einen Unterordner umleiten möchten, der den Domänennamen enthält

RewriteCond %{HTTP_Host} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*
8
inf3rno

Ich habe festgestellt, dass es wichtig ist, den Umfang der Umleitung auf das Stammverzeichnis .. zu beschränken, um eine zirkuläre Umleitung zu vermeiden.

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
6
Nir O.

Die meisten der oben genannten Lösungen sind korrekt, jedoch fehlt ihnen die Transparenz der Weiterleitung.

In meinem Fall wollte ich beim Besuch von www.example.com in das Unterverzeichnis / store umgeleitet werden, ohne die URL auf www.example.com/store zu aktualisieren. (Alles, was ich möchte, ist, den Seitencode aus diesem Verzeichnis zu erhalten). Wenn dies der Fall ist, funktioniert die untenstehende Lösung perfekt.

RewriteEngine on
RewriteCond %{HTTP_Host} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/$1 [L]

source: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory

5
Mahmoud Zalt

Man kann auch Redirect für diesen Zweck verwenden

Redirect 301 / www.example.com/store

Oder Alias ​​ für das Mapping

Alias / /store

Edit: mod_alias ist nur in httpd.conf anwendbar.

Referenzen

4
Abhishek Gurjar

Früher verwende ich den folgenden Code, der korrekt funktioniert, um die Stamm-URL jeder meiner Domains/Unterdomänen in ihre entsprechenden Unterverzeichnisse umzuleiten, die genau wie die folgende Sub-/Domain benannt sind:

RewriteCond %{HTTP_Host} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_Host}/$1 [L,QSA]

RewriteCond %{HTTP_Host} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_Host}/$1 [L,QSA]

RewriteCond %{HTTP_Host} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_Host}/$1 [L,QSA]

RewriteCond %{HTTP_Host} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_Host}/$1 [L,QSA]

Wenn ich jedoch weitere Subs oder Domains hinzufügen möchte, muss dies im obigen Code hinzugefügt werden. Es sollte viel bequemer sein, die Arbeit zu vereinfachen wie Platzhalter (*) - wie folgt:

RewriteCond %{HTTP_Host} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_Host}/$1 [L,QSA]

Wenn also weitere Subdomains/Domains hinzugefügt werden, solange der Subdomain-Name ein Präfix von sub hat (wie :₃.domain1.com, sub1.domain3.com usw.), bleibt der Code gültig.

4
Chetabahana

Ich denke, die Hauptprobleme mit dem von Ihnen geposteten Code sind:

  • die erste Zeile stimmt mit einem Host überein, der streng mit sample.com beginnt, daher stimmt www.sample.com nicht überein.

  • die zweite Zeile benötigt mindestens einen Buchstaben, gefolgt von www.sample.com, der ebenfalls nicht übereinstimmt (warum haben Sie das erste W entkommen?)

  • keine der enthaltenen Regeln wird auf die von Ihnen in Ihrem Ziel angegebene URL umgeleitet (Plus, Probe ist als Beispiel falsch geschrieben, aber das ist nicht relevant).

Hier sehen Sie den Code, den Sie derzeit haben:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_Host} ^sample.com$
RewriteRule (.*) http://www.sample.com/$1 [R=301,L]

RewriteCond %{HTTP_Host} ^(.+)\www.sample\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]
3

Ein bisschen googeln, gibt mir diese Ergebnisse:

RewriteEngine On
RewriteBase /
RewriteRule ^ index. (. *)? $ http://domain.com/subfolder/ [r = 301]

Dadurch wird jeder Versuch umgeleitet Greifen Sie auf eine Datei namens index.something zu .__ zu. Dein Unterordner, ob die Datei existiert oder nicht.

Oder probiere es aus:

RewriteCond% {HTTP_Host} ! ^ www.sample.com $ [NC]
RewriteRule ^ (. *) $ % {HTTP_Host}/samlse/$ 1 [R = 301, L]

Ich habe in der .htaccess-Datei nicht viel weitergeleitet, daher bin ich mir nicht sicher, ob dies funktioniert.

3
Steven

Es gibt zwei Möglichkeiten, um dies zu erreichen: 1. Erstellen Sie eine .htaccess-Datei im Stammordner wie unter (ersetzen Sie einfach example.com und mein_dir durch Ihre entsprechenden Werte):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_Host} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_dir/$1
RewriteCond %{HTTP_Host} ^(www.)?example.com$
RewriteRule ^(/)?$ my_dir/index.php [L] 
</IfModule>
  1. Verwenden Sie RedirectMatch, um nur die Stamm-URL "/" in einen anderen Ordner oder eine andere URL umzuleiten.

    RedirectMatch ^/$ http://www.example.com/my_dir

1
Mushtaq Hussain

versuchen Sie, die folgenden Zeilen in htaccess zu verwenden 

Hinweis: Möglicherweise müssen Sie überprüfen, wie der Name von default.html lautet

default.html ist die Datei, die standardmäßig im Stammordner geladen wird.

RewriteEngine

Redirect /default.html http://example.com/store/

1
Abouasy

Dies versucht das Unterverzeichnis, wenn die Datei nicht im Stammverzeichnis vorhanden ist. Benötigt dies, da ich eine grundlegende .html-Website verschoben habe, die erwartet, auf der Root-Ebene ausgeführt zu werden und in ein Unterverzeichnis verschoben zu werden. Funktioniert nur, wenn alle Dateien leer sind (kein .htaccess-Trickery im Unterverzeichnis möglich). Nützlich für verknüpfte Dinge wie css- und js-Dateien.

# Internal Redirect to subdir if file is found there.
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
RewriteRule ^(.*)$ /subdir/$1 [L]
0
mikeytown2

Ich beantworte die ursprüngliche Frage nicht mit einem Hinweis auf eine andere mögliche Syntax (es gibt viele unter den anderen Antworten), sondern mit dem Hinweis auf etwas, mit dem ich mich einmal befassen musste, brauchte ich eine Weile, um herauszufinden: 

What am I doing wrong?

Es besteht die Möglichkeit, dass% {HTTP_Host} nicht oder überhaupt nicht richtig gefüllt wird. Obwohl ich nur gesehen habe, dass es nur auf einem Computer auf einem gemeinsam genutzten Host vorkommt, ist bei einigen benutzerdefinierten Apache 2.2-Patches dies trotzdem möglich.

sie fügen diesen Code einfach in Ihre .htaccess-Datei ein 

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /folder/index.php [L]
</IfModule>
0