.htaccess Перенаправить все субдомены в соответствующую папку. - PullRequest
0 голосов
/ 23 февраля 2020

Я использую этот .htaccess для перенаправления каждого субдомена в папку с именем, аналогичным субдомену, и все запросы к соответствующему индексу. php.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?sub.domain.com$
RewriteCond %{REQUEST_URI} !^/sub/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /sub/$1
RewriteCond %{HTTP_HOST} ^(www.)?sub.domain.com$
RewriteRule ^(/)?$ sub/index.php [L]

Это прекрасно работает, но я бы нравится работать с несколькими поддоменами.

Основываясь на нескольких ответах, которые я нашел в SO, код должен выглядеть примерно так, как показано ниже, но я не могу заставить его работать.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?(.*).domain.com$
RewriteCond %{REQUEST_URI} !^/(.*)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /%1/$1
RewriteCond %{HTTP_HOST} ^(www.)?(.*).domain.com$
RewriteRule ^(/)?$ %1/index.php [L]

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Примерно так должно происходить перенаправление с подстановочными знаками, , если имя домена не начинается с www. Обратите внимание на отрицательное условие, используя восклицательный знак.

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteCond %{HTTP_HOST} ^(.+?)\.domain\.com$ [NC]
RewriteRule ^ http://example.com/%1/index.php [R=301,L]

^(.+?) фиксирует все предшествующее domain.com, если только он не равен www.

PS: извините за последнюю строку, он должен читать domain.com (каким бы ни был ваш фактический домен) вместо примера. ком . Мне пришлось сделать это из-за ограничений на размещение на SO.

0 голосов
/ 23 февраля 2020

Это должен быть прямой подход:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*)\.example\.com$
RewriteRule ^ /%1%{REQUEST_URI} [QSA,END]

If перенаправит все имена хостов в домене "example.com" и удалит эту историю c "www." Приставочные люди всегда так волнуются. Это не обрабатывает основной домен (с префиксом "www." Или без него), вам нужно добавить, что если вы не используете отдельный виртуальный хост для этого специального. Материал index.php лучше обрабатывать с помощью директивы DirectoryIndex, которую предлагает http-сервер apache. Это приводит к менее сложным настройкам и более чистым URL.

В случае, если вы получили внутреннюю ошибку сервера (http статус 500), используя приведенное выше правило, есть вероятность, что вы используете очень старую версию apache http сервера. В этом случае вы увидите определенный намек на неподдерживаемый флаг [END] в файле журнала ошибок http-серверов. Вы можете попытаться обновить или использовать более старый флаг [L], он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от вашей настройки, конечно, вам нужно будет добавить другое условие перезаписи, чтобы прервать бесконечное переписывание l oop.

Эта реализация также будет работать в конфигурации хоста http-серверов или внутри распределенного файла конфигурации (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете распределенный файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация была включена вообще в конфигурации хоста и чтобы он находился в папке DOCUMENT_ROOT хоста.

И общее замечание: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования распределенных файлов конфигурации (".htaccess"). Эти распределенные файлы конфигурации добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...