Страница 1 из 1

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

Добавлено: 2017.03.15, 14:05
lgXenos
Доброго
Все не дает мне покоя идея бюджетного варианта множества сайтов на одном хостинге через 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

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

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

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

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

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

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

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

Добавлено: 2017.05.01, 13:42
VLD-UKRAINE
Вам на один IP необходимо повесить большое количество сайтов или одним фреймворком управлять большим количеством сайтов или приложений?

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

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

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

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

Добавлено: 2017.05.18, 16:06
lgXenos
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 уже для конкретно этого приложения, с какими-угодно внутренними правилами, свойственными только ему

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

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

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

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: