Перенаправление non-www URL к www, использующему .htaccess

Вы также можете попробовать JWebBrowser от DJ Native Swing: http://djproject.sourceforge.net/ns

6
задан Rana Ghosh 2 May 2017 в 15:10
поделиться

7 ответов

Добавьте следующий RewriteCond:

RewriteCond %{HTTP:Host} ^[^.]+\.[a-z]{2,5}$ [NC]

Тем путем это только применит правило к nondottedsomething.uptofiveletters, как Вы видите, subdomain.domain.com не будет соответствовать условию и таким образом не будет переписан.

Можно изменить [a-z] {2,5} для более строгого соответствия tld regex, а также размещения всех ограничений для позволенных символов в доменных именах (как [^]. + является более разрешающим, чем строго необходимый).

В целом, я думаю в этом случае, что это не было бы необходимо.

Править: sadie определил дефект на regex, изменил первую часть его от [^]. к [^]. +

3
ответ дан 17 December 2019 в 00:17
поделиться

Я получил больше контроля с помощью 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>
1
ответ дан 17 December 2019 в 00:17
поделиться

Zigdon имеет верное представление кроме его regex, не совершенно правильно. Использовать

^example\.com$

вместо его предложения:

^example\.com(.*)

Иначе Вы будете только соответствовать example.com, Вы будете соответствовать вещам как example.comcast.net, example.com.au, и т.д.

1
ответ дан 17 December 2019 в 00:17
поделиться

@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 делают довольно хороший случай (по моему скромному мнению), для этого являющегося "правильным" способом сделать это, но это - все еще, конечно, просто вопрос предпочтения. Одна вещь состоит наверняка в том, хотя, намного легче записать универсальное правило для такого перенаправления, чем этот.

1
ответ дан 17 December 2019 в 00:17
поделиться

0100-й @org Да, существует много переменных, упущенных из описания проблемы, и все Ваши точки являются допустимыми и должны быть обращены в случае фактической реализации. Существуют оба за и против к Вашему предложенному regex. С одной стороны, это легче и соответствует требованиям завтрашнего дня на другом, Вы действительно хотите соответствовать example.foobar, если отправлено в заголовке Хоста? Могли бы быть некоторые пограничные случаи, когда Вы закончите тем, что перенаправили к неправильному домену. Третья альтернатива изменяет regex для использования списка фактических доменов, если больше чем один, как

RewriteCond %{HTTP:Host} (example.com|example.net|example.org) [NC]

(Отметьте к chris, что каждый изменится %1),

@chrisofspades Это не предназначено для замены его, условие номер два, гарантирует, что это не имеет www, тогда как мое не делает. Это не изменит значения %1, %2, %3, потому что это не хранит соответствия (iow, это не использует круглые скобки).

1
ответ дан 17 December 2019 в 00:17
поделиться

Разве Вы не можете скорректировать RewriteCond, чтобы только воздействовать на example.com?

RewriteCond %{HTTP:Host} ^example\.com(.*) [NC]
0
ответ дан 17 December 2019 в 00:17
поделиться

Почему у Вас только нет чего-то вроде этого в Вашем vhost (httpd) файлом?

ServerName: www.example.com
ServerAlias: example.com

Конечно, то перенаправление привычки, которое только продолжится как нормальное

0
ответ дан 17 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: