.htaccess переписати субдомен в каталог


Відповіді:


107

Спробуйте помістити це у свій файл .htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]

Для більш загального правила (яке працює з будь-яким субдоменом, а не тільки sub), замініть останні два рядки таким:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

3
Рішення Ansari буде працювати, однак, коли я переходжу до http://test.domain.com, URL-адреса перенаправляє мене http://test.domain.com/subdomains/test/. Чи можливо, не показуючи /subdomains/test/кінець?
Ерік Джупвік,

2
У цьому випадку, я вважаю, вам доведеться вивчити використання mod_proxy і вказати Pпрапор на додачу до L.
Ансарі,

1
Ні, він переспрямовує на http://test.domain.com/subdomains/test/, коли я лише хочу, щоб це було показаноhttp://test.domain.com/
Ерік Джупвік,

1
Я не бачу, як це переспрямовує на test.domain.com/subdomains/test- можливо, тут відбувається щось інше. Чи можете ви додати RewriteBase /відразу після RewriteEngine on? Крім того, якщо ви хочете, щоб він продовжував відображатися, test.domain.comвам доведеться використовувати mod_proxy та [P]прапор.
Ансарі,

1
Я зміг змусити його працювати за допомогою відповіді @ anubhava тут: stackoverflow.com/a/22395008/128984
Micah

50

Я не фахівець mod_rewrite, я часто борюся з цим, але я робив це на одному зі своїх сайтів, можливо, для цього вам знадобляться інші прапори тощо. Я використовую це:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 

Будь-які інші правила перезапису для решти веб-сайту повинні піти згодом, щоб запобігти їхньому втручанню в переписування вашого субдомену.


Я б сказав так. Я виявив, що це налаштування є правильним, так само, як і моя відповідь тут .
Четабахана

5
Просто як посилання, на випадок, якщо хтось, хто починає з, .htaccessзаходить на цю сторінку (як я це зробив), окрім створення власне .htaccessфайлу, щоб він набув чинності, вам потрібно встановити AllowOverrideу своїх VirtualHostналаштуваннях ( stackoverflow.com/a/22819550/1657502 ) , увімкніть rewriteмодуль Apache, а потім перезапустіть Apache ( stackoverflow.com/a/5758551/1657502 )
Антоніо Вініцій Менезес Медей

Це не спрацює, якщо ви використовуєте www для відвідування субдомену. Рішення @Minh спрацює у всіх випадках.
Рохан Худе

@RohanKhude, ти маєш на увазі, якщо ти хочеш, щоб www.example.com і example.com обслуговували інший вміст? Оскільки, як правило, для SEO у вас буде www.example.com, щоб видати постійне переспрямування на example.com або навпаки.
Lee Kowalkowski

1
@RohanKhude www як субдомен субдомену - це також те, що вам також потрібно було б працювати на рівні DNS, чи не так? Я думаю, що ваше сподівання, що воно має працювати для будь-якого довільного субдомену, є неправильним. Відповідь Minh ( stackoverflow.com/a/41389905/30945 ) передбачає, що ваша конфігурація .htaccess підтримує 1 і лише 1 субдомен, тому є менш надійною в цьому аспекті. Моє рішення підтримує стільки піддоменів, скільки вам потрібно, але так, вам потрібно чітко визначити кожен підтримуваний піддомен, але необов’язковий www.префікс, мабуть, найкраще підтримується через переспрямування, ніж перезапис.
Lee Kowalkowski

18

Ви можете використати таке правило в .htaccess, щоб переписати субдомен у підпапку:

RewriteEngine On

 # If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 # Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Пояснене пояснення:

  RewriteEngine on

У наведеному вище рядку сервер повідомляє про те, щоб увімкнути механізм для переписування URL-адрес.

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

Цей рядок є умовою для RewriteRule, де ми збігаємося з хостом HTTP, використовуючи шаблон регулярного виразу. Умова говорить, що якщо хостом є sub.domain.com, то виконайте правило.

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Правило відповідає http://sub.domain.com/foo і внутрішньо перенаправляє його на http://sub.domain.com/folder/foo .

Замініть sub.domain.com на ваш субдомен і папку з ім'ям папки, на яку ви хочете вказати свій субдомен.


1
Це правильна відповідь для мене - пояснення того, як я сюди потрапив, наступне. Приїхав сюди, шукаючи давню проблему з перенаправленням субдоменів, яка, очевидно, зламалася, коли я встановив SSL на основному сайті TLD. Спочатку перенаправлення все ще намагалося використовувати TLD головного сайту і порушувало правила безпеки. Мені потрібно було тримати субдомен (який знаходився на абсолютно іншому TLD) на тому самому хості, але подалі від основного сайту. Додавання правила перезапису, як зазначено вище, дозволило мені переслати повний субдомен до папки, розміщеної на головному сайті TLD.
Річард Боун,

8

У мене була та ж проблема, і я знайшов детальне пояснення на веб-сайті http://www.webmasterworld.com/apache/3163397.htm

Моє рішення (вміст субдоменів повинен знаходитись у папці з назвою sd_subdomain:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]

1
У мене це не працює, чи потрібно налаштовувати щось у зоні dns домену?
totoaussi,

1
@totoaussi вам слід створити * запис або запис A для кожного субдомену, вказуючи на той самий сервер.
Пабло Торресілла,

4

Це перенаправляє до тієї самої папки на субдомен:

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1

3

Спробуйте розмістити цей файл .htaccess у папці субдомену:

RewriteEngine On

RewriteRule ^(.*)?$ ./subdomains/sub/$1

Він переспрямовує на http://domain.com/subdomains/sub/ , коли ви хочете, щоб він відображав лише http://sub.domain.com/


Питання було задано у 2012 році та має 8 відповідей. Ваша відповідь додає значення на даний момент?
ppovoski

Це рішення спрацює, навіть якщо ви використовуєте www для відвідування субдомену
Рохан Худе,

2

Перенаправити каталог піддоменів:

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]

0

Для будь-якого запиту на субдомен використовуйте це:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

Просто створіть папку, таку ж, яка вам потрібна піддоменне ім’я. Папка повинна існувати так: domain.com/sub для sub.domain.com .


Це працює для мене, але файл не зберігається. Наприклад sub.domain.com/index.php кидок 404
Паоло Фаломо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.