301 Перенаправление с основного домена (www и без www) на поддомен - PullRequest
5 голосов
/ 20 августа 2010

Мне нужно перенаправить из основного домена, такого как mydomain.com или www.mydomain.com, на sub.mydomain.com - и это должно работать для всех запросов, поэтому mydomain.com/wh независимо идет на sub.mydomain.com/whwhat.

Я пробовал это, которое работает только для не-www в основном домене:

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

Ответы [ 2 ]

3 голосов
/ 21 августа 2010

Вы можете также объединить их в одно правило:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^ http://sub.example.com%{REQUEST_URI} [R=301,L]

Замечание Марка о / является важным соображением. Так как вы определяете правило в .htaccess, ввод (и связывание захваченной обратной ссылки) не будет начинаться с косой черты, поэтому вам действительно нужен явный слот в этом случае (как у вас).

Так как в любом случае мы просто хотим весь путь, использование %{REQUEST_URI} более надежно в этом смысле, потому что оно всегда будет иметь косую черту, независимо от контекста, в котором мы используем правило.

2 голосов
/ 20 августа 2010

Также добавьте:

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

Следует также отметить, что вы, вероятно, не хотите, чтобы последние / в вашем RewriteRule добавляли две косые черты к перенаправленному URL (например, http://mydomain.com/foo.html становится http://sub.mydomain.com//foo.html).

...