Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Различные вопросы по установке и настройке фреймворка, конфигурции веб-сервера и IDE.
Ответить
lgXenos
Сообщения: 228
Зарегистрирован: 2015.11.30, 15:42

Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Сообщение lgXenos » 2017.03.15, 14:05

Доброго
Все не дает мне покоя идея бюджетного варианта множества сайтов на одном хостинге через mod_rewrite

Хочется добавлять бесконечное количество applications, после чего вешать на них соответствия по домену

Во время обсуждений моей статьи на хабре, было предложено заюзать:
https://github.com/mickgeek/yii2-advanc ... /.htaccess
Но там выходит не совсем универсально все же. Получается при добавлении нового надо копипастить кучу блоков и условий
Мой же вариант плох запарками в enviroment & tests. Собственно из-за чего и хочу распилить снова

Какой каркас вижу я?
  • Сайт конфигурируем на корень проекта. Там размещаем глобальный .htaccess (1)
  • У каждого приложения, в папке WEB сохраняем .htaccess (2)
  • Дальше в .htaccess (1) происходит определение домена и проброс запроса внутрь подпапки
  • .htaccess (2) после проброса разруливается сам че-куда
Какое нерабочее начало .htaccess (1) я сделал?

Код: Выделить всё

Options FollowSymLinks
AddDefaultCharset utf-8
RewriteEngine On

# Don't loop: https://habrahabr.ru/post/75885/
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule .* — [L]

RewriteCond %{HTTP_HOST} ^rh\.dev$
RewriteRule . /frontend/web%{REQUEST_URI} [L]

RewriteCond %{REQUEST_URI} \.(htaccess|htpasswd|svn|git)
RewriteRule \.(htaccess|htpasswd|svn|git) - [F]
Собственно вопрос, как это все же подправить?
Ибо когда идет запрос типа rh.dev/index.php - апач отправляет хотя бы в нужную папку, но в неправильный файл
А если обращаться чисто в корень rh.dev - то он работает с последним правилом и никуда не шевелится

PS: apache2.4
LogLevel debug rewrite:trace3
ErrorLog ${APACHE_LOG_DIR}/error-rh.log

anton_z
Сообщения: 218
Зарегистрирован: 2017.01.15, 15:01

Re: Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Сообщение anton_z » 2017.03.22, 08:58

Не проще взять дешевенький VPS и настроить там столько виртуальных хостов, сколько надо?

С .htaccess как ни крути - онанизм)

lgXenos
Сообщения: 228
Зарегистрирован: 2015.11.30, 15:42

Re: Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Сообщение lgXenos » 2017.03.23, 23:47

anton_z писал(а):
2017.03.22, 08:58
Не проще взять дешевенький VPS и настроить там столько виртуальных хостов, сколько надо?

С .htaccess как ни крути - онанизм)
Я ж программист, а не системный администратор. Зачем мне VPS? Чтоб мне все там сломали хакеры, если у меня мания преследования? :D

Аватара пользователя
VLD-UKRAINE
Сообщения: 16
Зарегистрирован: 2017.04.29, 18:56

Re: Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Сообщение VLD-UKRAINE » 2017.05.01, 13:42

Вам на один IP необходимо повесить большое количество сайтов или одним фреймворком управлять большим количеством сайтов или приложений?

Аватара пользователя
vitalik1183
Сообщения: 1628
Зарегистрирован: 2014.07.01, 08:42

Re: Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Сообщение vitalik1183 » 2017.05.04, 09:54

Положите приложение в папку недоступную из веб и ставьте алиасы(за исключением конфигов). Никаких мод_реврайтов не нужно! Хоть миллион сайтов поднимайте.

И да, nginx уже используйте!
Yii2!

lgXenos
Сообщения: 228
Зарегистрирован: 2015.11.30, 15:42

Re: Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Сообщение lgXenos » 2017.05.18, 16:06

vitalik1183 писал(а):
2017.05.04, 09:54
Положите приложение в папку недоступную из веб и ставьте алиасы(за исключением конфигов). Никаких мод_реврайтов не нужно! Хоть миллион сайтов поднимайте.
И да, nginx уже используйте!
VLD-UKRAINE писал(а):
2017.05.01, 13:42
Вам на один IP необходимо повесить большое количество сайтов или одним фреймворком управлять большим количеством сайтов или приложений?
Спасибо, что уделили минутку
Это с Yii просто постольку-поскольку связано. Так что можно от этого абстрагироваться и переформулировать:

[*] В web-root размещаются папки. Каждая папка - это отдельно-живущий сайт. Не важно, на чем: об этом знает сервер только когда в нее входит соответственно
[*] Тут же, в web-root кладем htaccess, который в зависимости от домена делает реврайт в подпапку сказанную с ним. Например:

Код: Выделить всё

RewriteCond %{HTTP_HOST} ^rh\.dev$
RewriteRule . /frontend/web%{REQUEST_URI} [L]
[*] Дальше веб-сервер "проваливается" в нее и видит htacccess уже для конкретно этого приложения, с какими-угодно внутренними правилами, свойственными только ему

lgXenos
Сообщения: 228
Зарегистрирован: 2015.11.30, 15:42

Re: Кого можно спросить глубокий вопрос про mod_rewrite + htaccess + apache2 ?

Сообщение lgXenos » 2017.05.18, 19:01

Всем спасибо
Полагаю, что я решил свой вопрос
В первом приближении у меня был верный каркас, но куча мелочей, которые всячески мне мешали добиться того, что я хотел
Конечная версия выглядит как:

Код: Выделить всё

Options FollowSymLinks
AddDefaultCharset utf-8
RewriteEngine On

# Don't loop: https://habrahabr.ru/post/75885/
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule .* - [L]

RewriteCond %{REQUEST_URI} \.(htaccess|htpasswd|svn|git)
RewriteRule \.(htaccess|htpasswd|svn|git) - [F]

RewriteCond %{HTTP_HOST} ^site1.dev$
RewriteRule .* /site1/$1 [L,NC,QSA]

RewriteCond %{HTTP_HOST} ^test2.dev$
RewriteRule .* /test2/$1 [L,NC,QSA]

RewriteRule .* /forbidden.html [L]
Пример работы скрипта:
Изображение

В апаче конфиг обоих сайтов ведет на одну папку соответственно:

Код: Выделить всё

<VirtualHost *:80>
        ServerName site1.dev
        ServerAlias site1.dev
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/ms
        <Directory />
                Options FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
#       LogLevel debug rewrite:trace1
        ErrorLog ${APACHE_LOG_DIR}/error_site1.log
        CustomLog ${APACHE_LOG_DIR}/access_site1.log combined
</VirtualHost>


<VirtualHost *:80>
        ServerName test2.dev
        ServerAlias test2.dev
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/ms
        <Directory />
                Options FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
#       LogLevel debug rewrite:trace1
        ErrorLog ${APACHE_LOG_DIR}/error_test2.log
        CustomLog ${APACHE_LOG_DIR}/access_test2.log combined
</VirtualHost>


PS: всего-то надо было уволится, прогулять месяц без компьютера и решение само пришло :lol:

Ответить