простой поддомен, настроенный для локальной разработки (htaccess?) - PullRequest
1 голос
/ 17 января 2011

Я пытаюсь настроить веб-сайт, домен

examplesproject.co.uk

с поддоменом, который на данный момент называется

sub.examplesproject.co.uk .

Я с Bluehost, и поэтому я настроил поддомен, и у меня есть тот же корень документа для examplesproject.co.uk и sub.examplesproject.co.uk но я хочу, чтобы содержимое для

sub.examplesproject.co.uk

действительно находилось в

examplesproject.co.uk / sub .

Так почему я не настроил корень документа в examplesproject.co.uk / sub для субдомена?Потому что тогда в локальной разработке мне нужно будет рассматривать два домена как совершенно отдельные, и это будет означать отсутствие относительных URL-адресов, что кажется глупым, учитывая, что папка поддомена просто мучительно внутри основного домена.

Однако, если кто-топри просмотре sub.examplesproject.co.uk они получат то же содержимое, что и examplesproject.co.uk , которое мне не нужно, поэтому я настроил переписывание htaccess в корнепапка выглядит так:

#rewite sub-domain to sub directory
RewriteCond %{HTTP_HOST}   ^[www\.]*sub.examplesproject.co.uk [NC]
RewriteCond %{REQUEST_URI} !^/sub/.*
RewriteRule   ^(.*)  /sub/$1  [L]

Это работает, однако, если вы перейдете к examplesproject.co.uk / sub , вы все равно сможете увидеть содержимое, а я не хочу иметь два местоположениядля того же контента.Однако, если я переписываю этот подкаталог, чтобы показать субдомен в адресе браузера, то я создаю цикл, в котором он постоянно обновляется.

В качестве еще одной побочной точки, я хочу, чтобы мой основной сайт был принудительнымиспользовать www, поэтому у меня также есть следующее в моем корневом htaccess ..

#force add www on main domain
RewriteCond %{HTTP_HOST} ^examplesproject.co.uk$
RewriteRule ^(.*)$ http://www.examplesproject.co.uk$1 [R=301,L]

Однако я хочу заставить поддомен не иметь infront www, то есть http://sub.examplesproject.co.uk и NOT http://www.sub.examplesproject.co.uk. Чтобы сделать это, я пытаюсь сделать следующее, но, похоже, это не работает для других каталогов в поддомене (если это имеет смысл).В любом случае это код, который я поместил в подкаталог (то есть по адресу examplesproject.co.uk / sub ):

#force remove www on sub-domain
RewriteCond %{HTTP_HOST} ^www.sub.examplesproject.co.uk [NC]
RewriteRule ^(.*)$ http://sub.examplesproject.co.uk/$1 [L,R=301]

Я бы хотел упомянуть, если это повлияет на вещи.

Итак, мой вопрос: как мне получить хорошую настройку, где:

  1. Я могу использовать относительные URL для разработки и реализации моего субдомена.
  2. при просмотре http://sub.examplesproject.co.uk отображается содержимое http://www.examplesproject.co.uk/sub
  3. при просмотре http://www.examplesproject.co.uk/sub не дублируется субдомен при отображении содержимого (для целей SEO)

, а также

  1. Основной домен examplesproject.co.uk принудительно использует www - http://www.examplesproject.co.uk.
  2. Поддомен sub.examplesproject.co.uk заставляет НЕ использовать www - http://sub.examplesproject.co.uk.

Если кто-то может помочь, я был бы очень благодарен.Кстати, локально я настроил виртуальные хосты http://examplesproject и http://sub.examplesproject, используя файл wamp и hosts для репликации поведения в сети.

Большое спасибо за чтение.Ответы / предложения приветствуются.

1 Ответ

0 голосов
/ 11 августа 2011

Извините за это Тим Пост!Я поместил контент в это время!Приятно смотреть на это.Надеюсь, что это кому-то поможет.

Это решение, которое сработало для меня (спасибо Джиму (jdMorgan) из webmasterworld за это - http://www.webmasterworld.com/apache/4254301.htm)..

Поместите все эти правила в таком порядкев корень .htaccess:

# Externally redirect direct client requests for test subdomain subdirectory paths to the test subdomain
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /sub/([^\ ]*)\ HTTP/
RewriteRule ^sub/(.*)$ http://sub.examplesproject\.co\.uk [R=301,L]
#
# Externally redirect all non-canonical, non-blank, non-test-subdomain hostname requests to canonical "www" main domain
RewriteCond %{HTTP_HOST} !^(www\.examplesproject\.co\.uk)?$
RewriteCond %{HTTP_HOST} !^([^.:]+\.)*sub\.([^.:]+\.)*examplesproject\.co\.uk [NC]
RewriteRule ^(.*)$ http://www.examplesproject.co.uk$1 [R=301,L]
#
# Externally redirect non-canonical subdomain hostname requests to canonical test subdomain
RewriteCond %{HTTP_HOST} ^([^.:]+\.)*sub\.([^.:]+\.)*examplesproject\.co\.uk [NC]
RewriteCond %{HTTP_HOST} !^sub\.examplesproject\.co\.uk$
RewriteRule ^(.*)$ http://sub.examplesproject.co.uk/$1 [R=301,L]
#
# Internally rewrite sub-domain requests to subdirectory path
RewriteCond %{HTTP_HOST} ^sub\.examplesproject\.co\.uk$
RewriteCond $1 !^sub/
RewriteRule ^(.*)$ /sub/$1 [L]

Проверка THE_REQUEST в правиле now-first предотвращает возникшую проблему бесконечного цикла перенаправления.

Обратите внимание, что точные имена хостов теперь применяются из-за оченьосторожное использование чувствительности к регистру и привязки.

Отличный вариант!

...