.htaccess - як змусити "www." в родовому відношенні?


102

Це зміниться domain.comна www.domain.com:

# Force the "www."
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

Як замінити частину "домен", щоб вона працювала на будь-якому домені?

Відповіді:


249

Я використовував би це правило:

RewriteEngine On
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Перша умова перевіряє, чи значення Host не порожнє (у випадку HTTP / 1.0); другий перевіряє, чи не починається значення Хостwww. ; третій перевіряє HTTPS ( %{HTTPS}або onчи off, так що %{HTTPS}sабо onsабо , offsі в разі підібраний). Потім частина заміни просто об'єднує інформаційні частини з повною URL-адресою.onssRewriteRule


31
Це рішення працює лише у тому випадку, якщо ви хочете, щоб усі піддомени переадресували на www.yourdomain.com. Якщо ви хочете змусити www, вам слід оновити другий рядок таким чином:RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
Джаред Помранкі

2
Я не отримую жодного з моїх субдоменів на веб-сайті www.mydomain.com за допомогою правила, розміщеного у запитанні ...
lol

3
дуже розумний! Мені подобається, що ти змусив перевірку HTTPS повернути "S" у групі захоплення, яку ти використав у наступному рядку. дуже елегантно
code_monk

Схоже на універсальну відповідь, охоплює HTTP та звичайні протоколи, працює як шарм.
Клін Дільва

1
Дякую! Я б додав RewriteEngine Onяк перший рядок його заповнення, оскільки це може призвести до помилки 500 серверів, якщо копіювати, як є.
Райан Касас


5

Якщо ви хочете переспрямувати всі не-www запити на свій веб-сайт до версії www, все, що вам потрібно зробити, - це додати наступний код у свій .htaccess файл:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

3

Це не буде працювати з субдоменами.

domain.com правильно переспрямовується на www.domain.com

але

images.domain.com переспрямовується на www.images.domain.com

Замість того, щоб перевірити, чи піддомен "не www", перевірте, чи є дві крапки:

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Мені подобається це рішення. У будь-якому випадку зробити те ж саме з TLD, як .co.uk?
TylersSN

1
@iUseMagentoNow просто збільшуйте крапки, наприклад: RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\.(.*)\. [NC](Строго кажучи, ваш TLD все ще є, .ukа ваш домен something.co.)
mirabilos

.co в цьому випадку домен другого рівня і насправді не є частиною вашого домену, де as .uk - код країни TLD. Якщо чесно, попрацювавши в індустрії хостингу і побачивши нові формати доменних імен, я не можу побачити поточні формати TLD, що тривають для будь-якого іншого, крім офіційного використання. урядів, організацій тощо. У найближчому майбутньому, коли ви можете зареєструвати fqdn like, fred.bloggs за аналогічну ціну, ніж нинішні норми, тоді особиста веб-сторінка буде виглядати дуже різною з точки зору DNS.
Кріс

1

Далі має бути префікс "www" до будь-якого запиту, у якого його немає, і перенаправити відредагований запит на новий URI.

RewriteCond "%{HTTP_HOST}" "!^www\."         [NC]
RewriteCond "%{HTTP_HOST}" "(.*)"
RewriteRule "(.*)"         "http://www.%1$1" [R=301,L]

1
RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

Це переспрямування example.comна www.example.comвиключення субдоменів.


Мені здається, що це надсилає www.example.com на www.www.amample.com haha
Альберт Реншо

@Albert Можливо, це через кеш вашого браузера. Очистіть кеш і повторіть спробу.
Аміт Верма

Ви праві! Я щойно побіг у інкогніто (хром), і він працював чудово, дякую!
Альберт Реншо

1
Мені дуже подобається це загальне правило. Але він не працює для domain.co.uk, оскільки в ньому вже є дві крапки. Як це правило можна змінити, щоб воно працювало і для .co.uk?
Саха Ворбек

1
Для .co.uk та інших під cctlds це працює: ^ ([^.] + \. [^.] +) (\. (Uk | ar | cy | ar | tr))? $, Але, на жаль, є деякі змішані набрав tlds ( wiki.mozilla.org/TLD_List ), наприклад, es, які дозволяють domain.es, а також domain.com.es. Додавання | es до регулярного виразу відповідатиме domain.es, а також www.domain.es, який тут не потрібно. Доведеться знайти спосіб впоратися з цим змішаним типом sub-cctlds
Sacha Vorbeck


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.