Apache menulis ulang beberapa kondisi

9

Saya memiliki situs web yang dimigrasikan dari nama domain lama (mis. Olddomain.com) ke nama domain baru (mis. Newdomain.com).

Untuk alasan SEO, saya perlu menulis ulang semua lalu lintas situs web ke nama domain utama baru (mis. Www.newdomain.com). Sayangnya, saya tidak tahu bagaimana cara menambahkan beberapa kondisi penulisan ulang ATAU. Tampaknya dengan semua kondisi, contoh kode di bawah ini, saya mendapatkan kondisi DAN.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName newdomain.com
        ServerAlias www.newdomain.com
        ServerAlias olddomain.com
        ServerAlias www.olddomain.com
        DocumentRoot /var/www/newdomain.com/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
        RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Bisakah seseorang memberi saya sedikit bantuan? Bantuan apa pun akan sangat dihargai.

gurun8
sumber

Jawaban:

16

Terlepas dari kenyataan bahwa Anda telah menemukan solusi yang berfungsi untuk Anda, saya masih akan memposting ini karena milik Anda masih jauh dari optimal.

Solusi # 1 : Ganti [NC]oleh [NC,OR]dalam 2 baris RewriteCond pertama dari kode asli. Secara default satu RewriteCond ditautkan ke RewriteCond lain secara logis AND. Ini akan menginstruksikan Apache untuk menggunakan ORlogika:

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

Solusi # 2 : Karena Anda hanya memiliki 4 nama domain secara total, akan jauh lebih mudah untuk menggunakan pendekatan yang berlawanan - mengalihkan dari domain APA SAJA kecuali yang benar:

RewriteCond %{HTTP_HOST} !^www.newdomain.com [NC]
RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,L,NC]
LazyOne
sumber
Solusi # 2 adalah yang lebih baik, meskipun jika Anda punya www.newdomain.comdan test.newdomain.comatau sesuatu seperti itu, mungkin lebih baik untuk mencocokkan !newdomain.com$selama domain lama tidak berakhir dengan "newdomain.com" seperti "thisisanoldnewdomain.com". Lebih penting lagi dengan # 1, saya tidak dapat menemukan [ATAU] didokumentasikan di mana saja. Apakah itu berhasil?
DerfK
@DerfK docs - Anda harus menggulir sedikit: "'ornext | OR' (atau kondisi berikutnya) Gunakan ini untuk menggabungkan kondisi aturan dengan ATAU lokal alih-alih implisit DAN."
LazyOne
1

Baru saja menemukan kutipan ini:

rewriteConds hanya berlaku untuk rewriteRule tunggal yang mengikutinya.

di sini: http://www.webmasterworld.com/apache/3350200.htm

Inilah solusi untuk saya:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

    RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

    RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]
gurun8
sumber
1
Sebagai catatan kepada siapa pun yang berkunjung ke sini bertahun-tahun kemudian, solusi yang diusulkan oleh LazyOne di atas (dan diterima oleh OP) jauh lebih dioptimalkan, terutama jika Anda memiliki lebih dari dua atau tiga syarat untuk ORdisatukan.
Doktor J