Используя виртуальные хосты, я привык использовать это:
<VirtualHost: *:80>
ServerName www.example.com
Redirect permanent / http://example.com/
</VirtualHost>
Тем не менее, я часто вижу, что вместо этого используется переписывание:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Есть ли преимущества у одного подхода перед другим?
Эти две директивы приводят к тому, что один и тот же код 301 отправляется обратно в браузер. Так что никакой пользы ни для одного, ни для другого. Вы должны выбрать тот, который вам удобнее использовать и который облегчит чтение файла конфигурации.
Оба могут также отправлять что-то, кроме кода 301 (постоянное перенаправление). Вы всегда должны использовать 301, когда убираете (или требуете) www для ясности для SEO и браузеров. Остальные типы переадресации используются реже (очень редко); "временное перенаправление" является наиболее распространенным из них, и его следует использовать только в том случае, если место назначения перенаправления будет часто меняться (например, ссылка на вашу последнюю запись в блоге или что-то в этом роде).
Если вам не нужен mod_rewrite, не используйте его. Для таких простых случаев вполне достаточно mod_alias, и его гораздо проще понять. Кроме того, хотя и незначительный, mod_alias быстрее, чем mod_rewrite - это может иметь значение на сайтах с большим объемом.