.htaccess redirect semua halaman ke domain baru


218

Aturan pengalihan mana yang akan saya gunakan untuk mengalihkan semua halaman di bawah olddomain.exampleuntuk diarahkan newdomain.example?

Situs ini memiliki struktur yang sama sekali berbeda, jadi saya ingin setiap halaman di bawah domain lama untuk diarahkan ke halaman indeks domain baru .

Saya pikir ini akan dilakukan (di bawah direktori basis olddomain.example):

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]

Tetapi jika saya menavigasi ke olddomain.example/somepagesaya akan diarahkan ke newdomain.example/somepage. Saya mengharapkan pengalihan hanya ke newdomain.exampletanpa akhiran halaman.

Bagaimana cara menjaga bagian terakhir keluar?


8
Untuk menghemat waktu, gulir ke bawah ke jawaban terbaik yang tepat yaitu RewriteEngine on RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]* stackoverflow.com/a/7578810/1066234
Kai Noack

2
Perlu menunjukkan bahwa, terutama dari perspektif SEO, memiliki pengalihan banyak-ke-satu ke indeks / beranda umumnya merupakan ide yang buruk. Google cenderung melihatnya sebagai soft-404.
MrWhite

Jawaban:


201

Mungkin seperti ini:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]

Um, bisakah Anda mencoba memuat ulang browser Anda? bahkan mengarahkan dengan xampp di sini. Saya baru saja menguji.
ANDA

Buruk saya ... itu berfungsi, layanan hosting saya punya beberapa pengalihan lain yang fu **** segalanya. Terima kasih! :)
Yuval Adam

25
Bukan RewriteCond %{HTTP_HOST} !^NEWDOMAIN\.com$ [NC]?
Jim Geurts

1
Setelah musim dingin yang panjang saya mengedit kode sehingga akhirnya bisa berfungsi. (yang benar adalah mengarahkan jika EQUAL dan tidak BERBEDA dengan olddomain, itu! adalah masalahnya)
carla

5
@ Jimgeurts Hanya jika Anda ingin mengarahkan kembali SEMUA yang bukan domain baru. Namun, dalam kasus ini, kami ingin mengarahkan domain lama saja.
carla

442

Jawaban di bawah ini berpotensi menyebabkan loop pengalihan tak terbatas ...

Di sini, yang ini mengalihkan semua setelah nama domain pada url ke salinan yang sama persis pada url domain baru:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

www.example.net/somepage.html?var=foo dialihkan ke www.newdomain.com/somepage.html?var=foo


21
tidakkah pengalihan ini SETIAP permintaan, bahkan yang untuk newdomain.com? Dan pada dasarnya menyebabkan dua permintaan rangkap dalam kasus-kasus itu?
Bill Dami

33
Pertanyaannya adalah untuk mengarahkan kembali semuanya ke halaman rumah
kravits88

28
Meskipun ini bukan jawaban dari pertanyaan, tetapi saya datang ke pertanyaan ini dari SE mencari jawaban ini. terima kasih !!!
dav

Bagaimana kita dapat melakukan pengalihan dari subdomain ke domain baru?
Sukhjinder Singh

2
Bisakah seseorang menjawab pertanyaan Bill? Bukankah ini harus menggunakan RewriteCond untuk mencegah permintaan duplikat dan / atau menulis ulang yang tidak perlu? Saya kira itu tidak akan memiliki dampak nyata untuk menulis ulang setiap kali walaupun itu tidak perlu. Tapi mengapa melakukannya?
Andrew

80

Sekedar klarifikasi, setelah menghapus pengalihan hosting yang menghalangi, solusi asli saya juga berfungsi:

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]

Ini akan mengarahkan ulang ke indeks default, yang merupakan pertanyaan Anda. Hanya untuk kejelasan, karena, karena kedekatan, pernyataan Anda tampaknya diarahkan ke jawaban pengguna968421 tepat di atas ini, jawaban pengguna968421 benar ketika tujuannya adalah untuk mengarahkan ulang ke nama file yang sesuai di domain baru.
RationalRabbit

19

Saya telah menggunakan blog Wordpress saya ini sebagai .htaccess. Itu mengkonversi http: //www.blah.example/asad , http: //blah.example/asad , http: //www.blah.example2/asad dll, ke http: //blah.example/asad Terima kasih kepada semua jawaban lain saya menemukan jawabannya.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^YOURDOMAIN\.example$ [NC]
RewriteRule ^(.*)$ https://YOURDOMAIN.example/$1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

2
Saya menganggap ini jawaban yang paling komprehensif: menjaga peringkat untuk setiap halaman dan merupakan tantangan untuk semua domain yang bukan yang utama! Apa yang bisa lebih baik?
nzn

1
Kuncinya di sini adalah aturan penulisan ulang domain muncul sebelum aturan penulisan ulang indeks WordPress.
MrMoxy

14
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

Ini berhasil untuk saya


Ya, metode ini akan bersih dan menyenangkan !, bekerja untuk saya juga.
Cody

ini akan mengarahkan ulang dengan parameter dalam URl jika ada - index.php? aa = 9 akan membawa parameter ke domain baru
Darksymphony

13

Ada berbagai cara untuk melakukan ini dan berbagai pengalihan, saya telah mencantumkannya di bawah ini:

301 (Permanen) Redirect: Arahkan seluruh situs ke URL yang berbeda secara permanen. Ini adalah jenis pengalihan yang paling umum dan berguna dalam sebagian besar situasi. Dalam contoh ini, kami mengarahkan ulang ke domain "example.com":

# This allows you to redirect your entire website to any other domain
Redirect 301 / http://example.com/

302 Pengalihan (Sementara): Arahkan seluruh situs ke URL sementara yang berbeda. Ini berguna untuk keperluan SEO ketika Anda memiliki halaman arahan sementara dan berencana untuk beralih kembali ke halaman arahan utama Anda di kemudian hari:

# This allows you to redirect your entire website to any other domain
Redirect 302 / http://example.com/

Redirect index.html ke subfolder tertentu:

# This allows you to redirect index.html to a specific subfolder
Redirect /index.html http://example.com/newdirectory/

Mengarahkan file lama ke jalur file baru:

# Redirect old file path to new file path
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html

Redirect ke halaman indeks tertentu:

# Provide Specific Index Page (Set the default handler)
DirectoryIndex index.html

Jika Anda menambahkan $ 1 ke contoh pertama, seperti ini Redirect 301 / http://example.com/$1 maka semua halaman situs asli akan diarahkan ke root situs baru
Yassine Mokni

@YassinMK Tidak $1diperlukan di sini, Anda berpikir tentang RedirectMatcharahan (tapi kemudian Anda masih perlu mendefinisikan grup penangkap untuk $1referensi ke).
MrWhite

Meskipun semua Redirectarahan ini akan mengarahkan seperti untuk, sedangkan OP ingin mengarahkan hanya ke halaman rumah situs baru (meskipun itu sendiri tidak direkomendasikan). Anda mungkin perlu menggunakan RedirectMatcharahan jika Anda hanya ingin mengarahkan ulang ke URL tertentu.
MrWhite

alih-alih 301 Anda juga bisa menulis Redirect permanen / ttps: //www.example.com, Anda dapat melakukan ini di file vhost
Yvon Huynh

Tetapi pertanyaan terkait dengan .htaccess jadi mengapa menyebutkan file vhost?
RustyIngles

9

Jika Anda ingin mengalihkan dari beberapa lokasi ke subdomain Anda dapat menggunakan:

Redirect 301 /Old-Location/ http://subdomain.yourdomain.com


Itu cara terbaik. Karena banyak Webhosters tidak mengizinkan penggunaan RewriteEngine di .htaccess. Ini bekerja dengan baik!
Sprinterfreak

Anda harus menggunakan RewriteEngine untuk mengarahkan ulang. Alasan mengapa Anda memiliki masalah adalah RewriteEngine sudah aktif dan Anda hanya memerlukan aturan pengalihan. Saya senang itu membantu.
EmptySD

Tidak benar. Itu melompati semua hal Menulis ulang dan saat menggunakan RewriteEngine Onmelempar 500 Kesalahan Internal. Ini adalah Webspace yang sangat terbatas. Menggunakan Redirect 301 / http://fooadalah satu-satunya cara yang mungkin untuk dilakukan.
Sprinterfreak

6

Jika domain baru tempat Anda mengarahkan situs lama Anda berada pada host lain, Anda bisa menggunakan a Redirect

Redirect 301 / http://newdomain.com

Ini akan mengalihkan semua permintaan dari olddomainke newdomain.

Redirectarahan tidak akan berfungsi atau dapat menyebabkan a Redirect loopjika domain baru dan domain lama Anda keduanya ada di host yang sama, dalam hal ini Anda harus menggunakan mod-rewriteuntuk mengarahkan ulang berdasarkan header host yang diminta.

RewriteEngine on


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 

5

Reputasi saya tidak akan memungkinkan saya untuk mengomentari jawaban, tetapi saya hanya ingin menunjukkan bahwa jawaban dengan nilai tertinggi di sini memiliki kesalahan:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com$1 [R=301,L]

harus memiliki garis miring sebelum $ 1, jadi

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

3

Solusi saya sebagai SymLinks tidak berfungsi di server saya jadi saya menggunakan If di PHP saya.

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
$redirect = str_replace("www.", "", curPageURL());
$remove_http_root    = str_replace('http://', '', $redirect);
$split_url_array     = explode('/', $remove_http_root );


if($split_url_array[0] == "olddomain.com"){
    header("Location: http://www.newdomain.com/$split_url_array[1]");
    die();
}

2

Ini adalah bug dalam versi apache yang lebih lama (dan dengan demikian mod_rewrite) di mana awalan jalur ditambahkan ke jalur yang ditulis ulang jika diubah. Lihat disini

Saya pikir itu diperbaiki di apache2 V2.2.12, ada bendera khusus yang perlu Anda gunakan yang akan saya tambahkan di sini ketika saya menemukannya, (saya pikir itu NP untuk No Path)

RewriteRule ^(.*)$ http://newdomain.com/ [??]

Saya membenturkan kepala saya terhadap ini selama hampir satu bulan
Tanda Tanya

2

Dari sudut pandang kegunaan, akan lebih baik, jika Anda juga mengirim jalur dengan permintaan (yaitu, apa yang Anda miliki saat ini) dan biarkan situs baru Anda menanganinya:

Anda mencari "/ produk".

Sayangnya halaman ini hilang. Apakah Anda ingin mengunjungi "/ new_products"?

(dan lebih baik lagi, melakukan ini secara otomatis.)

Ini jelas banyak pengkodean dan heuristik untuk situs web yang lebih besar, tetapi menurut saya itu akan membayar dalam hal kepuasan pengguna (ketika bookmark yang disimpan dengan hati-hati dari produk impian Anda hanya membawa Anda ke halaman depan newdomain.com, ini membuat frustrasi.)


Untuk kata situs web ini cukup tidak relevan karena seluruh situs web telah berubah, tetapi Anda benar-benar benar. Situs web harus serasi mundur mungkin. +1
Yuval Adam

2

Jika Anda ingin mengarahkan ulang untuk menyelesaikan situs (domain) baru yang berbeda tanpa parameter atau halaman, gunakan ini:

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]

1
Ini tidak akan berfungsi seperti yang diharapkan ketika digunakan .htaccesskarena tidak akan cocok dengan URL apa pun di root dokumen. Ini akan berfungsi dalam konfigurasi server atau konteks VirtualHost.
MrWhite

2

Saya mencoba jawaban user968421 dan solusi OP tetapi browser muncul kesalahan keamanan untuk halaman checkout. Saya tidak bisa memberi tahu Anda mengapa sebenarnya.

Tuan rumah kami (Ground Site) juga tidak dapat menemukannya.

Solusi terakhirnya sudah dekat, tetapi sedikit perubahan pada jawaban user968421 (catatan: tidak seperti OP, saya mencoba untuk mengarahkan kembali ke halaman yang sesuai, tidak hanya ke beranda jadi saya mempertahankan referensi belakang [ $1setelah domain] dari user968421's menjawab):

RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]

Mendapat tweak dari generator pengalihan htaccess ini direkomendasikan oleh artikel Host Gator (kali putus asa, tindakan putus asa, oke?).


2

Sederhana seperti ini dan ini tidak akan membawa kueri penelusuran dari URL ke domain baru.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]

yang benar-benar bekerja untuk saya, butuh solusi tanpa mengeluarkan siput ke domain baru Terima kasih Dsynmphony
Faisal Mehmood Awan

1

Gunakan pengalihan bersyarat dengan Options -FollowSymLinksdan AllowOverride -Optionsdinonaktifkan oleh Hoster jika beberapa file lokal juga dilayani:

Contoh .htaccess

# Redirect everything except index.html to http://foo
<FilesMatch "(?<!index\.html)$">
    Redirect 301 / http://foo/
</FilesMatch>

Contoh ini akan melayani index.html lokal dan mengalihkan semua staf lain ke domain baru.


1

Coba metode ini untuk mengalihkan semua ke beranda domain baru, Ini berfungsi untuk saya:

RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule ^(.*)$ "https\:\/\/newdomain\.com\/" [R=301,L]

0

Jawaban sebelumnya tidak berhasil untuk saya.

Saya menggunakan kode ini. Jika Anda menggunakan OSX pastikan untuk menggunakan format yang benar.

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.