Вы также можете попробовать JWebBrowser от DJ Native Swing: http://djproject.sourceforge.net/ns
Добавьте следующий RewriteCond:
RewriteCond %{HTTP:Host} ^[^.]+\.[a-z]{2,5}$ [NC]
Тем путем это только применит правило к nondottedsomething.uptofiveletters, как Вы видите, subdomain.domain.com не будет соответствовать условию и таким образом не будет переписан.
Можно изменить [a-z] {2,5} для более строгого соответствия tld regex, а также размещения всех ограничений для позволенных символов в доменных именах (как [^]. + является более разрешающим, чем строго необходимый).
В целом, я думаю в этом случае, что это не было бы необходимо.
Править: sadie определил дефект на regex, изменил первую часть его от [^]. к [^]. +
Я получил больше контроля с помощью urlrewriter.net, чего-то как:
<unless header="Host" match="^www\.">
<if url="^(https?://)[^/]*(.*)$">
<redirect to="$1www.domain.tld$2"/>
</if>
<redirect url="^(.*)$" to="http://www.domain.tld$1"/>
</unless>
Zigdon имеет верное представление кроме его regex, не совершенно правильно. Использовать
^example\.com$
вместо его предложения:
^example\.com(.*)
Иначе Вы будете только соответствовать example.com, Вы будете соответствовать вещам как example.comcast.net, example.com.au, и т.д.
@Vinko
Для Вашего универсального подхода я не уверен, почему Вы приняли решение ограничить длину TLD в Вашем regex? Это не очень соответствует требованиям завтрашнего дня, и я не уверен, что извлекает выгоду, это обеспечивает? Это даже не на самом деле "теперь защищено", потому что существует по крайней мере один TLD с 6 символами там (.museum), который не будет подобран.
Кажется ненужным мне сделать это. Не могли Вы просто сделать ^[^.]+\.[^.]\+$
? (примечание: вопросительный знак является частью предложения, не regex!)
Все, что в стороне, существует большая проблема с этим подходом, который является: это перестанет работать для доменов, которые не являются непосредственно под TLD. Это - домены в Австралии, Великобритании, Японии и многих других странах, у кого есть иерархии: .co.jp, .co.uk, .com.au, и так далее.
Вызывает ли это какое-либо беспокойство для OP, я не знаю, но это - что-то, чтобы знать, если Вы после "исправляют весь" ответ.
OP еще не прояснил, хочет ли он универсальное решение или решение для сингла (или небольшая группа) известных доменов. Если это - последний, см. мое другое примечание об использовании подхода Zigdon. Если это - первый, то возобновите подход Vinko, принимающий во внимание информацию в этом сообщении.
Править: Одна вещь, которую я не учел до сих пор, который может или не может быть опцией для Вас бизнес-мудрый, состоит в том, чтобы пойти другим путем. Все наши сайты перенаправляют http://www.domain.com на http://domain.com. Люди по http://no-www.org делают довольно хороший случай (по моему скромному мнению), для этого являющегося "правильным" способом сделать это, но это - все еще, конечно, просто вопрос предпочтения. Одна вещь состоит наверняка в том, хотя, намного легче записать универсальное правило для такого перенаправления, чем этот.
0100-й @org Да, существует много переменных, упущенных из описания проблемы, и все Ваши точки являются допустимыми и должны быть обращены в случае фактической реализации. Существуют оба за и против к Вашему предложенному regex. С одной стороны, это легче и соответствует требованиям завтрашнего дня на другом, Вы действительно хотите соответствовать example.foobar, если отправлено в заголовке Хоста? Могли бы быть некоторые пограничные случаи, когда Вы закончите тем, что перенаправили к неправильному домену. Третья альтернатива изменяет regex для использования списка фактических доменов, если больше чем один, как
RewriteCond %{HTTP:Host} (example.com|example.net|example.org) [NC]
(Отметьте к chris, что каждый изменится %1),
@chrisofspades Это не предназначено для замены его, условие номер два, гарантирует, что это не имеет www, тогда как мое не делает. Это не изменит значения %1, %2, %3, потому что это не хранит соответствия (iow, это не использует круглые скобки).
Разве Вы не можете скорректировать RewriteCond, чтобы только воздействовать на example.com?
RewriteCond %{HTTP:Host} ^example\.com(.*) [NC]
Почему у Вас только нет чего-то вроде этого в Вашем vhost (httpd) файлом?
ServerName: www.example.com
ServerAlias: example.com
Конечно, то перенаправление привычки, которое только продолжится как нормальное