2015-02-25 3 views
0

У меня есть частично рабочий файл .htaccess, и я не могу на всю жизнь выяснить, что случилось.Что случилось с этим файлом .htaccess?

Вот цель: У меня есть example.com, чья каноническая форма Я хочу быть www.example.com. У меня это работает нормально. У меня также есть поддомен, расположенный в папке /lang/chinese, которую я хочу решить как china.example.net. Это тоже отлично. Наконец, у меня есть (припаркованный) домен example.net, который я хочу перенаправить на example.com и решить поэтому как www.example.com.

Это последняя часть, которая не работает. Если я поставлю www.example.net в своем браузере, это останется в адресной строке.

Вот соответствующая часть моего .htaccess файла:

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} china.example.com [NC] 
RewriteRule ^(.*)$ http://china.example.com$1 [L,R=301] 


RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301] 
RedirectMatch 301 ^/lang/chinese/(.*)$ http://china.example.com/$1 


RewriteCond %{http_host} ^example\.net [nc] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=permanent,nc,L] 

Очевидно, что я делаю что-то здесь не так. Как я могу это исправить?

+0

Можете ли вы показать 'VirtualHost' конфигурации для 'domain2'? – anubhava

ответ

1

Для этого правила:

RewriteCond %{http_host} ^example\.net [nc] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=permanent,nc,L] 

в ^ говорит регулярное выражение для сопоставления с начала строки. Это значит, что вы никогда на самом деле не ищете «www».

Я считаю, что вы хотите изменить, что:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.net [nc] 

Информация от Apache:

+0

Спасибо! Ты прав. Я тестировал его, и он работает. Я все еще не знаю, почему. Поскольку среднее правило работает и изменяет domain1.com на www.domain1.com (даже при том, что в самом правиле не упоминаются символы «www»), тогда почему не такая же конструкция (RewriteCond% {HTTP_HOST}^domain1.com [ NC]), которые работали там, работайте, когда я использую его позже, чтобы обратиться к domain2.com? Любое разворачивание этого было бы оценено, но в любом случае еще раз спасибо. – Frankie

+0

В случае вашего второго RewriteCondition вы говорите: «В любое время, когда сайт запрашивает совпадения * точно *« domain1.com », измените его на www.domain1.com». В обновленной версии вашего третьего RewriteCondition говорится: «В любое время, когда сайт запрашивает совпадения« domain2.com »или« www.domain2.com », измените его на www.domain1.com». Включение "(www \.)?" говорит, что контролер выполнит приведенное ниже правило в случае, когда www. присутствует И в случае, когда www. нет. – Harvtronix

+0

Для второго правила, в случае входящего запроса на «www.domain1.com», ни одно из ваших правил не соответствует, и запрос проходит нормально. В случае входящего запроса для «domain1.com» ваш второй RewriteCond соответствует, и он переписывается на «www.domain1.com». в основном второе правило не заботится о WWW, потому что если он уже существует, он просто полностью переписывает переписывание. – Harvtronix

Смежные вопросы