2011-06-29 17 views
8

Wiem, że istnieje wiele przykładów na Stackoverflow, ale nadal brakuje mi czegoś.htaccess: przekierowanie starej domeny i wszystkich stron do nowej domeny

próbuję przekierować http://old.domain.com/fr/ do http://brand.new-domain.com/fr/ z następującymi zasadami, ale to nie działa:

# Enable Rewrite Engine 
RewriteEngine On 
RewriteBase/

# Add a trailing slash to paths without an extension 
RewriteCond %{REQUEST_METHOD} !=POST 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

# Redirect domain 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^old.domain.com [OR] 
RewriteCond %{HTTP_HOST} ^other-old.domain.com [NC] 
RewriteRule ^(.*)$ http://brand.new-domain.com/$1 [r=301,L] 

# Remove index.php 
# Uses the "exclude method" 
# http://expressionengine.com/wiki/Remove_index.php_From_URLs/#Exclude_List_Method 
# This method seems to work best for us, you might also use the include method. 
# http://expressionengine.com/wiki/Remove_index.php_From_URLs/#Include_List_Method 
# Exclude root files 
RewriteCond $1 !^(index\.php) [NC] 
# Exclude EE folders 
RewriteCond $1 !^(assets|ee-admin|images|templates|themes|fr|nl)/ [NC] 
# Exclude user created folders 
RewriteCond $1 !^(assets|css|img|js|swf|uploads)/ [NC] 
# Exlude favico, robots, ipad icon 
RewriteCond $1 !^(favicon\.ico|robots\.txt|pple-touch-icon\.png) [NC] 
# Remove index.php 
RewriteCond %{QUERY_STRING} !^(ACT=.*)$ [NC] 
RewriteCond %{QUERY_STRING} !^(URL=.*)$ [NC] 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

on poprawnie przekierować gdy zgłoszę URL korzeniowy, ale nie wtedy, gdy nazywam strona. Co ja robię źle?

Z góry dziękuję!

Pv

Odpowiedz

9

Podczas pisania reguł mod_rewrite reguły są stosowane w kolejności ich wyświetlania.

Aby przekierować starą domenę do nowej domeny, będziemy chcieli, że reguła będzie pierwszy w pliku .htaccess lub httpd.conf — wszystkie inne przepisy powinny pojawić się po niej.

Jeśli chcesz tylko przekierować pewien katalog następujący reguła będzie to zrobić, jednocześnie umożliwiając reszta miejscu normalnie funkcjonować:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Redirect Only Matching Directories 
    RewriteCond %{REQUEST_URI} ^/(fr|fr/.*)$ 
    RewriteRule ^(.*)$ http://brand.new-domain.com/fr/$1 [R=301,L] 
</IfModule> 

Jeśli chcesz przekierować całą witrynę, Poniższa reguła będzie zrobić:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Redirect Entire Site to New Domain 
    RewriteCond %{HTTP_HOST} ^old.domain.com$ [OR] 
    RewriteCond %{HTTP_HOST} ^other-old.domain.com$ [NC] 
    RewriteRule ^(.*)$ http://brand.new-domain.com/$1 [R=301,L] 
</IfModule> 

Jeśli dbasz o pozwalając roboty znać treść została przeniesiona i chcą, aby przejście jako bezszwowe jak to możliwe, należy zachować 301 Redirect flagi i w RewriteRule.

Zapewni to, że użytkownicy i wyszukiwarki zostaną przekierowani na właściwą stronę.


Skoro już jesteśmy w tej sprawie, w ramach wydania EE 2.2, EllisLab teraz „oficjalnie” oferuje ograniczoną pomoc techniczną dla removing index.php from ExpressionEngine URLs.

Wystarczy dodać lub zaktualizować swój kod do następujących, upewniając się, aby rozważyć wszelkie reguły, które mogą mieć już na swoim miejscu:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Removes index.php 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php/$1 [L] 

    # If 404s, "No Input File" or every URL returns the same thing 
    # make it /index.php?/$1 above (add the question mark) 
</IfModule> 
3

Spróbuj użyć następującego ruke jako pierwszy:

# Redirect domain 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^old.domain.com [OR] 
RewriteCond %{HTTP_HOST} ^other-old.domain.com [NC] 
RewriteRule ^(.*)$ http://brand.new-domain.com/$1 [R=301,L] 

przeszkadza również górną obudowę R ze jest skrótem dla dolnego przypadku redirect.

1

Czy próbowali za pomocą mod_alias proste instrukcje przekierowania (moduł podstawowy, że masz) , zanim spróbujesz czegoś hacky-mod-przepisać?

zrobiłbym VirtualHost z ServerName old.domain.com iw tym VH Dodam tę regułę:

Redirect /fr http://brand.new-domain.com/fr 

od Doc:

Następnie każdy wniosek począwszy ścieżka_url powróci żądanie przekierowania do klienta w lokalizacji docelowego adresu URL. Dodatkowe informacje o ścieżce wykraczające poza dopasowaną ścieżkę URL zostaną dołączone do docelowego adresu URL.

Zdobądź oddzielną usługę VirtualHost dla brand.new-domain.com (z ServerName brand.new-domain.com), a w tym nie ustawiaj reguły przekierowania.

Jeśli nadal chcesz obsłużyć 2 domeny w tym samym VirtualHost, będziesz musiał użyć przepisania przez mod, ponieważ nawet RedirectMatch nie może sprawdzić domeny żądania w zapytaniu.

Powiązane problemy