2011-12-09 15 views
12

Przekierowuję jedną domenę do drugiej, ale chcę zachować ścieżkę w przekierowaniu. Na przykład chcę odwiedzić www.example.com/services/education/page.html, ale moje przekierowanie przeniesie je do www.new-example.com/services/education/page.html. Co mam napisać w pliku .htaccess, aby zachować ścieżkę "/services/education/page.html"?Jak przekierować całą domenę 301 zachowując ścieżkę

Teraz mam:

redirect 301 http://www.example.com/ http://www.new-example.com/ 

Ale nie jestem pewien, czy to działa, czy nie (Nie można jeszcze przetestować jak czekam na szczegóły domen itp). Chcę się tylko upewnić, kiedy umieszczę witrynę na żywo. Czy to prawda, czy też jestem poza bazą?

Dzięki!

+0

Możesz nadal testować, zanim uzyskasz informacje o swojej domenie w istniejącej domenie, np. google.com lub nawet nieistniejące, ponieważ wszystko, co chcesz zobaczyć, to przekierowanie 301 we wszystkich przypadkach, które chcesz, zachowując ścieżkę. –

+1

Helicon ma aplikację RegexTest, która umożliwia testowanie wpisów .htaccess. Wygeneruje nawet dla ciebie regułę, na podstawie twoich danych wejściowych/testów. – Aaron

Odpowiedz

22

ten powinien zrobić:

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} !new-example.com$ [NC] 
RewriteRule ^(.*)$ http://new-example.com/$1 [L,R=301] 
+0

Mój plik .htaccess już ten kod (Wordpress), w tym: RewriteEngine on RewriteBase/ RewriteRule^index \ .php $ - [L] RewriteCond% {REQUEST_FILENAME} -f RewriteCond % {REQUEST_FILENAME}! -d RewriteRule. /index.php [L] Czy potrzebuję tych 4 linii kodu, które mi dałeś? Czy będę miał problem z wstawieniem RewriteEngine On dwa razy (to samo dla RewriteBase /) – jasonaburton

+0

pomiń pierwsze dwa wiersze, jeśli już istnieją w .htaccess –

+0

Przekierowania te nie działają. Jedyny kod, który mam w moim pliku .htaccess został opublikowany w powyższym komentarzu. Czy jest jakiś powód, dla którego nie działa? – jasonaburton

5

spróbuj dodać następujące wpisy do .htaccess w katalogu głównym domeny example.com

RewriteEngine On 
RewriteBase/

#for all requests to www.example.com 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
#redirect them to new-example 
RewriteRule (.*) http://www.new-example.com/$1 [R=301,L] 
4

Oryginalna polecenie wykorzystuje moduł Apache z mod_alias oraz to zadziała, ale możesz go zaktualizować do:

Redirect 301/http://www.new-example.com/ 

Usunięcie dokładnych domena bieżącej (starej) domeny oznacza, że ​​wszystkie domeny wskazujące ten folder zostaną wysłane do nowej domeny, dzięki czemu ten jednoliniowy skrypt będzie bardziej odporny.

Inne odpowiedzi używają modułu Apache mod_rewrite. Jeśli masz to również zainstalowane, to jest w porządku, ale jest 4 wiersze kodu w porównaniu do jednego. Dodatkowo, mod_alias jest częścią pakietu "podstawowego", więc powinno być na wszystkich serwerach Apache, a mod_rewrite jest opcjonalnym rozszerzeniem, więc niektóre mogą go nie mieć.

+0

Działa bardzo dobrze. Wydaje się, że najlepsze odpowiedzi wynikają z braku zależności od mod_rewrite. –

Powiązane problemy