Почему htaccess в папке поддоменов переопределяет аспекты htaccess в моем основном домене? - PullRequest
0 голосов
/ 15 мая 2019

Позвольте мне объяснить мои настройки здесь, у меня есть два домена, для именования их давайте назовем их domain1.com и domain2.com. У меня есть общий хостинг под управлением cPanel.

Domain1.com - мой основной домен, и я использую настройки моей учетной записи хостинга. У меня есть сайт, размещенный в этом домене. Domain2.com устанавливается как дополнительный домен и направляет в папку внутри корня основных доменов. У него есть собственный сайт (блог Ghost).

Это все отлично работает. Однако веб-сайты, размещенные в двух доменах, совершенно разные, и я не хотел, чтобы поддомен работал, но, насколько я могу судить, у доменов дополнений в cPanel должен быть поддомен, чтобы быть добавленным в учетную запись. Варианты перенаправления для поддоменов в cPanel не достаточно хороши для меня, так как я хотел, чтобы любой, кто обращается к скажем domain1.com/domain2, получил ошибку 404, как если бы ее не было. Поэтому я настроил файл .htaccess для домена domain1.com так:

RewriteEngine On
#301 (permenant) redirects all HTTP requests to HTTPS (SSL)
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#404 redirects all domain.com/subdomain requests
RewriteCond %{HTTP_HOST} ^(www.)?domain1.com$ [NC]
RewriteCond %{REQUEST_URI} ^/domain2/(.*)$
RewriteRule ^(.*)$ - [L,R=404]
#404 redirects all subdomain.domain.com & www.subdomain.domain.com requests
RewriteCond %{HTTP_HOST} ^domain2.domain1.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain2.domain1.co.uk$ [OR]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ - [L,R=404]

Это сработало отлично, любой, кто попытается получить доступ к домену 2 через домен1, получит ошибку 404. Но это было до того, как я установил Ghost на domain2. После того, как я установил Ghost, я создал файл .htaccess в папке domain2 внутри корня domain1. Мне пришлось поместить его в него, чтобы запустить Ghost for, так как он использует NodeJS:

RewriteEngine on
RewriteRule ^(.*)$ http://127.0.0.1:55555555/$1 [P,L]

Это также отлично работает, за исключением одного аспекта. Теперь все запросы к домену с использованием domain1.com снова начали работать. Например, если я введу domain2.domain1.com, он покажет мне блог Ghost, где по-прежнему правильно отображалась ошибка 404 Not Found. Почему это так и как мне решить эту проблему?

В качестве примечания я также начал пытаться перенаправить все http-запросы на https. Я добавил следующее в файл htaccess domain1.com, так как хотел, чтобы все запросы на обоих доменах перенаправлялись на https, и я решил, что это необходимо:

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Теперь этот вид работает. Все запросы, какими бы они ни были (например, с или без www), перенаправляются на https, и когда я захожу на него в браузере, я получаю зеленый значок, указывающий, что он защищен с помощью SSL. Опять же, даже с этим предыдущая проблема перенаправления домена все еще не работает. Но у меня есть еще одна странная проблема.

Если я наберу в своем браузере просто «domain1.com» (т.е. без https: // или www. Или их комбинации), в адресной строке отобразится просто «domain1.com», но с зеленым значок и сказать, что это обеспечено. Однако, если я ввожу «domain2.com» (снова без https: // или www и т. Д.), Он делает то же самое , за исключением , он заявляет, что он не безопасный, предлагая это запрашиваемый http.

И все же, если я введу www.domain2.com или http://domain2.com,, это сработает, и я получу защищенный значок. Это очень загадочно. Похоже, что перенаправление https работает на каждый запрос, за исключением только «domain2.com», в то время как любой другой вариант (www.domain2.com, http://domain2.com и т. Д.) Работает нормально. Есть какие-нибудь подсказки? Я имею в виду, что я сделал что-то не так с файлами htaccess, но я не знаю, что, я получил большую часть того, что я вставил в них, от поиска сайтов, таких как Stackexchange, но лично я ничего о них не знаю или как они работают.

1 Ответ

0 голосов
/ 15 мая 2019

Я думаю, что я исправил свою проблему здесь.

Я исправил основной htaccess, поэтому перенаправление https работает следующим образом:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Из того, что я могу сказать, лучше сделатьэто так, чем раньше.Это само по себе не решило проблемы.Для меня это исправило редактирование htaccess domain2.com, чтобы оно выглядело так:

RewriteEngine on
#Force WWW if it isn't in the request
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
#Or include WWW even if it is in the request
RewriteCond %{HTTP_HOST} ^www\. [NC]
#Then Force it to use https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Defines this domain so main htaccess rules for subdomains work
RewriteCond %{HTTP_HOST} ^(.*)?domain2.com$ [NC]
#Proxy for Ghost
RewriteRule ^(.*)$ http://127.0.0.1:55555555/$1 [P,L]

Теперь все работает.Все запросы перенаправляются на https.Все запросы к поддомену из основного домена завершаются с ошибкой 404. domain2.com теперь перенаправляет на https://www.domain2.com или https://domain2.com, поэтому теперь он всегда защищен с помощью SSL.Я новичок в htaccess, что, вероятно, очевидно, и я не сомневаюсь, что некоторые или все из этого могут удалить ненужные элементы или упростить их, поэтому, если кто-то захочет исправить мой синтаксис, чтобы он был менее запутанным, я был бы признателен.

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