#.htaccess #subdomain
#.htaccess #поддомен
Вопрос:
У меня есть настройка поддомена в моем .htaccess
, которая, похоже, работает только со страницей по умолчанию index.html
. Я бы хотел, чтобы он работал для ЛЮБОЙ страницы в папке, соответствующей поддомену. Отредактировано для конфиденциальности, предположим, что мой домен example.org
. Соответствующие части файла выглядят следующим образом…
#subdomain
RewriteCond %{HTTP_HOST} ^subname.example.org$ [OR]
RewriteCond %{HTTP_HOST} ^www.subname.example.org$
# (a few lines added by my hosting company deleted -- see below)
RewriteRule ^/?$ "http://example.org/subname/" [R=301,L]
Итак, результатом вышесказанного является то, что если у меня есть index.html
страница в моем ‘public-html’ (root?), http://example.org
и другая index.html
, хранящаяся в подпапке (с тем же именем, что и поддомен), я получу этот ожидаемый результат, который работает…
перейдите к: http://example.org
результатам просмотра http:// example.org/index.html
перейдите к: http://subname.example.org
результатам просмотра http:// example.org/subname/index.html
Пока все отлично. Это то, чего я ожидал, когда создавал доменное имя. Однако, учитывая конкретный файл, myfile.html
хранящийся в subname
папке, я ожидал бы, что это также сработает, но это не так…
перейдите к: http://subname.example.org/myfile.html
приводит к ошибке 404.
Это несмотря на то, что просмотр в http://example.org/subname/myfile.html
работает нормально. В этом случае myfile.html
отображается. Итак, могу ли я что-нибудь сделать, чтобы изменить код поддомена, чтобы получить результат, который я ищу? А именно, просмотр в http://subname.example.org/ANYFILE
должен работать так же, как и просмотр в http://example.org/subname/ANYFILE
, независимо от того, что такое «ANYFILE». В конце концов, это одна из основных причин, по которой я с самого начала настроил поддомен!
Примечание: Признаюсь, я полагался на утилиту cPanel моей хостинговой компании для создания кода поддомена, поэтому сначала я обратился за помощью в их техническую поддержку. Короче говоря, они этого не сделали. Может быть, то, на что я надеялся, на самом деле невозможно?
Кроме того, строки, которые я удалил из кода, имели отношение к чему-то под названием «общеизвестный / acme-challenge», добавленный моей хостинговой компанией в какой-то момент. Поскольку их удаление никак не повлияло на описанное мной поведение, я опустил его, чтобы не затуманивать проблему.
Комментарии:
1.
.htaccess
все в нижнем регистре.
Ответ №1:
RewriteRule ^/?$ "http://example.org/subname/" [R=301,L]
Это только «перенаправляет» корень документа. Чтобы перенаправить все URL-адреса, вам нужно изменить вышеуказанное, чтобы прочитать что-то вроде:
RewriteRule (.*) http://example.org/subname/$1 [R=301,L]
$1
Обратная ссылка ссылается на URL-путь, записанный в RewriteRule
шаблоне, т.е.. (.*)
.
Нет необходимости в обратной косой черте — экранируйте двоеточия, косые черты и точки в строке подстановки (это типично для cPanel).
Кроме того, строки, которые я удалил из кода, имели отношение к чему-то под названием «общеизвестный / acme-challenge», добавленный моей хостинговой компанией в какой-то момент.
Эти строки, вероятно, потребуются, когда (давайте зашифруем?) Сертификат SSL автоматически обновляется. (Хотя вышеуказанное перенаправляет на «http» — вы не используете HTTPS?)
Обновить:
RewriteCond %{HTTP_HOST} ^subname.example.org$ [OR] RewriteCond %{HTTP_HOST} ^www.subname.example.org$
Кроме того, эти два условия могут быть сведены к одному условию, если вы хотите. Например, приведенное выше эквивалентно:
RewriteCond %{HTTP_HOST} ^(www.)?subname.example.org$
Комментарии:
1. Да, это старый сайт (еще не https). Но в любом случае, 1st спасибо за разъяснение, почему были добавлены все эти экранирования. Кроме того, простите мой предыдущий комментарий (только что удаленный!) Ваше предложение, похоже, работает! Похоже, это НЕ мешает доступу к файлам в корневом каталоге документа, в домене / SOMEFILE . И, как и ожидалось, файл в «domain /sub /» теперь может быть извлечен с помощью HTTP://sub/domain/SOMEFILE ! Я также хочу, чтобы вы знали, что я был четвертым в технической поддержке по этому вопросу в течение нескольких дней, и ни один из них не смог помочь. К сожалению, я думаю, что если это невозможно сделать через CPANEL, то не знаю, с чего начать. Еще раз спасибо!
2. Кроме того, поскольку я еще не приступил к созданию своего сайта HTTPS, я не уверен, почему были добавлены все эти другие строки. И все это заставило меня очень осторожно относиться к использованию CPANEL, когда я решу перейти на https. Но сейчас мне, вероятно, не нужны эти строки, поэтому я сохранил старый htaccess и оставил их вне фиксированной версии. Еще раз спасибо!
3. Пожалуйста. Да, служба поддержки хостинга обычно не обрабатывает
.htaccess
запросы. (Хотя иногда только веб-хост будет знать правильную директиву для использования в определенных случаях.) Возможно, веб-хост включил SSL-сертификат по умолчанию (переход к «HTTPS everywhere»), и в этот момент эти условия (досадно) вводятся перед каждойRewriteRule
директивой. Смотрите Мой ответ на следующий вопрос о ServerFault для получения дополнительной информации об этом.4. Еще раз спасибо, и действительно, мне, вероятно, не понадобилась вторая строка (условие «ИЛИ») в моей ПЕРЕЗАПИСИ, потому что непосредственно перед этим я давно добавил правило для удаления «www» из запросов. Я сделал это после того, как сводящий с ума спринт отладки показал, что файлы cookie JavaScript устанавливаются, когда посетитель был там с WWW.MYDOMAIN не совпадали с файлами cookie, установленными при посещении MYDOMAIN. По-видимому, это часто случалось, поскольку я был на медицинских сайтах, которые не могли найти мои записи, если я не посещал WWW! Поэтому переписывание без WWW было моим решением. Тем не менее, мне нужно ХОРОШЕЕ руководство. HTACCESS book!
5. Спасибо! Я изучу это. htaccess — это одна из тех вещей, которая, в отличие от моего более частого кодирования на JavaScript и PHP, используется недостаточно часто, чтобы я мог что-либо успешно делать без какого-либо руководства. И, честно говоря, регулярные выражения все еще часто сбивают меня с толку. Таким образом, я часто вставляю решения без 100% понимания, что я НЕНАВИЖУ делать. Таким образом, я ищу объяснения ELIF, которые являются одной из тех глупых аббревиатур, означающих «Объяснять, как будто мне пять». Я полагаю, что все началось с веб-сайта, использующего эту аббревиатуру, приглашая людей задавать вопросы и получать простые ответы. 🙂