Jak przekierować roota i rootować tylko poprzez htaccess?

53

Chcę przekierować tylko mój katalog główny do innego adresu URL, ale zachowaj wszystkie podkatalogi / /, do których należą (i przekieruj)

przykład:

mysite.com/1 przekierowuje do gdzieś mysite.com/admin otwiera stronę

Chcę, aby mysite.com/ przekierowywał na mysecondsite.com i tylko to z przekierowaniem 301 za pomocą htaccess


źródło

Odpowiedzi:

75

Spróbuj tego:

RewriteEngine on
RewriteCond %{HTTP_HOST} mysite\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
Rewriterule ^(.*)$ http://mysecondsite.com/ [L,R=301]

Jeśli nie musisz sprawdzać starej domeny (na przykład jeśli katalog, w którym znajduje się Twój .htaccess, jest używany tylko przez starą domenę), możesz usunąć drugą linię.

Rodrigo Sieiro
źródło
1
W moim przypadku musiałem przekierować ruch na mysite.com/, ale nie na foo.mysite.com, więc musiałem dodać wyrażenie regularne do wiersza 2: RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]aby upewnić się, że dopasowanie dotyczy konkretnego hosta
jaygooby
Bardziej efektywne jest sprawdzenie ścieżki URL we RewriteRule wzorcu (jak w odpowiedzi @ DaveForgaca), zamiast używania dodatkowego warunku do sprawdzenia REQUEST_URIzmiennej serwera.
MrWhite
38

Jeśli masz na myśli, że chcesz przekierować „/” do innej domeny, zadziała to:

RewriteEngine on
RewriteRule ^$ http://www.example.com/ [R=301,L]

To tylko pasuje do katalogu głównego domeny bez niczego po nim, więc przekieruje tylko nazwę domeny bez określonej nazwy pliku.

Dave Forgac
źródło
Lekka odmiana działała dla mnie. Dodane na dole mojego htaccess, po wywołaniu wszystkich innych reguł, chciałem po prostu renderować stronę powitalną dla każdego, kto odwiedza moją domenę główną (bez żadnej subdomeny): RewriteCond% {HTTP_HOST}! ^ (Subdomain1 | subdomain2) \. Mysite \ .com $ [NC] RewriteRule ^ $ /welcome.php [NC, L]
MarsAndBack
15

To powinno działać dobrze:

RedirectMatch 301 ^/$ https://example.com/
stefanbc
źródło
2
Byłoby to preferowane (w stosunku do istniejących odpowiedzi), jeśli nie używasz jeszcze mod_rewrite do innych przekierowań.
MrWhite
-3

Krótsze rozwiązanie:

Redirect 301 / http://mysecondsite.com/
minipark
źródło
12
To NIE zrobi tego, czego chce jardel. Przekieruje WSZYSTKIE strony, a nie tylko root.
sharoz