Поддомен в файле .htaccess работает только с индексом

#.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, которые являются одной из тех глупых аббревиатур, означающих «Объяснять, как будто мне пять». Я полагаю, что все началось с веб-сайта, использующего эту аббревиатуру, приглашая людей задавать вопросы и получать простые ответы. 🙂