Я только что переехал на новый хост, и у них другая панель управления, чем та, которую я использовал раньше. На моем старом хосте все адреса domain.com/* были 301 перенаправлены на www.example.com/*, мне не нужно ничего настраивать, и я пытаюсь воспроизвести это на моем текущем хосте.
После некоторого поиска я нашел следующий код .htaccess, который я поместил в корневой файл .htaccess своего сайта:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
И это работает, перенаправляя все страницы example.com/* на www.example.com/*, Кроме когда я захожу на example.com/forum. Если я захожу на свой форум с сайта www.example.com/forum, по какой-то причине он перенаправляется на example.com/forum (без www). Раньше этого не делали.
Итак, я поместил модифицированную версию приведенного выше кода в верхнюю часть файла .htaccess моего форума (который находится в / forum), с той лишь разницей, что в последней строке был добавлен «/ forum»:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/forum/$1 [L,R=301]
Это работает, но мне просто интересно, собираюсь ли я делать это «правильно» или есть другой способ, который лучше?
Правила, которые я использую в корневом каталоге .htaccess
RewriteCond %{HTTP_HOST} ^[^.]*?\.?([^.]+\.[^.]+)$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
Есть ли у вас другие правила перезаписи в вашем файле .htaccess? Если это так, поместите первые 3 строки, которые вы показали, над другими правилами перезаписи.
Когда я это сделал, example.com/xyz перенаправлялся на www.example.com/xyz.
Мой файл .htaccess находится в моем корневом каталоге (/ var / ww в Ubuntu Lucid).
Вам нужен только один .htaccess в корне:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=permanent,L]