У клиента была заявка на www.example.com/dir
. Теперь они создали субдомен в dir.example.com
. Поддомен ссылается на файлы, хранящиеся в www.example.com/dir
. Теперь им хотелось бы, чтобы люди получали доступ www.example.com/dir
быть перенаправленным на dir.example.com
.
Полагаю, мне нужен .htaccess
сидеть в www.example.com/dir
и если к нему обращаются с www, перенаправить на поддомен, просто не уверен в синтаксисе.
Добавить .htaccess
в каталог, принадлежащий www.example.com/dir
:
RewriteEngine on
RewriteCond ${HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*) http://dir.example.com/$1 [R,L]
Первая строка позволяет mod_rewrite
, вторая строка проверяет, что текущий запрос использует имя хоста www.example.com
для доступа к ресурсу, а третья строка перенаправляет все такие запросы на желаемое целевое имя хоста.
А просто:
Redirect /dir http://dir.example.com
Попробуйте это правило в файле .htaccess в вашем / dir каталог:
RewriteCond %{HTTP_HOST} !=dir.example.com
RewriteRule .* http://dir.example.com/$0 [L,R=301]
Или это правило в корневом каталоге:
RewriteCond %{HTTP_HOST} !=dir.example.com
RewriteRule ^dir(/(.*))?$ http://dir.example.com/$2 [L,R=301]
Джоуэлл был почти у цели:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^/dir(/.*)?$ http://dir.example.com$1 [R=301,L]
Вам нужна ведущая косая черта в RewriteRule
или ничего не будет совпадать. В (/.*)?$
бит означает соответствие 0 или 1 фрагмента «косая черта», затем чего-либо в конце URI. (Это важно - без него мы бы также сопоставили www.example.com/dirsomethingelse
).
www.example.com/dir -> dir.example.com
www.example.com/dir/ -> dir.example.com/
www.example.com/dir/blah.html -> dir.example.com/blah.html
Это должно работать:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^dir/(.*) http://dir.example.com/$1 [R=301,L]