Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: mod_rewrite сайт в папку  (Прочитано 522 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlexPebody

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
  • IT Engineer
    • Просмотр профиля
mod_rewrite сайт в папку
« : 05 Август 2016, 05:19:41 »
Всем доброго времени.

Сломал голову, пожалуйста помогите с задачей... Бьюсь уже около года, все время сдаваясь и не находя все же решение, оставляю вид site.ru/dir

Четкая задача: есть сайт site.ru, но на хосте (хост свой, рулить могу как хочу), на хосте корневой .htaccess и много папок с сайтами (dir1, dir2, ...)
Если делать стандартное перенаправление, вид URL в строке адреса получается site.ru/папка/, а мне нужно чтобы вид URL остался site.ru/

Получилось сделать только на одном из папок сайта, на субдомене, делаю так:

Код: Text
  1. RewriteCond %{REQUEST_URI} !^/dir1
  2. RewriteCond %{HTTP_HOST} ^sub.site.com$ [NC]
  3. RewriteRule ^(.*)$ /dir1/$1 [L,QSA]
===> Результат правила выше, вот такой: при запросе sub.site.com получаем sub.site.com и все ресурсы сайта из папки dir1

Код: Text
  1. RewriteCond %{REQUEST_URI} !\/site
  2. RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
  3. RewriteRule ^(.*)$ dir2/$2 [L]
===> Результат правила выше, вот такой: при запросе site.ru получаем site.ru, но ТОЛЬКО начальную страницу index.html, прочие ресурсы сайта из папки dir2 НЕ ГРУЗЯТСЯ!
Если делать RewriteRule ^(.*)$ dir2/$1 [L], сайт совсем не грузится, вечная загрузка, видимо зацикливание по /dir2/dir2/dir2/dir2/...


Прошу, пожалуйста помогите, кто точно знает, как сделать тоже самое но не для субдомена, а для сайта? Заранее БОЛЬШОЕ БОЛЬШОЕ СПАСИБО!!!
« Последнее редактирование: 05 Август 2016, 06:28:23 от AlexPebody »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26086
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #1 : 05 Август 2016, 05:30:17 »
на хосте много папок с сайтами (обычная ситуация)...
Это уже лет 15 как необычная ситуация.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн AlexPebody

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
  • IT Engineer
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #2 : 05 Август 2016, 06:28:55 »
на хосте много папок с сайтами (обычная ситуация)...
Это уже лет 15 как необычная ситуация.
Если можете подскажите как мне сделать? Заранее спасибо!

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26086
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #3 : 05 Август 2016, 06:31:14 »
Дайте каждому сайту свой домен и не морочьте людям головы.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн AlexPebody

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
  • IT Engineer
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #4 : 05 Август 2016, 06:45:31 »
Дайте каждому сайту свой домен и не морочьте людям головы.
Я не могу это сделать, тк эти папки для сервисных целей, я не морочу голову никому!

К примеру есть домен без хостинга, сайт маленький и покупать отдельный хостинг ммысла нет, но есть хостинг 50ГБ в распоряжении, нужно перенаправить этот домен по А, а также сделать запись по перенаправлению запросов... И таких задач масса, поэтому заводить для каждого сервиса свой домен и свой хостинг, не целесообразно. Я просто попросил ответа на вопрос, если можете помогите пожалуйста, зачем я буду флудить и объяснять, как правильно и по фен шуй сделать я прекрасно знаю.
« Последнее редактирование: 05 Август 2016, 07:02:15 от AlexPebody »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26086
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #5 : 05 Август 2016, 07:23:16 »
много папок с сайтами (dir1, dir2, ...)
Я не могу это сделать, тк эти папки для сервисных целей
Определитесь, это каталоги с сайтами или каталоги для сервисных целей.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн AlexPebody

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
  • IT Engineer
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #6 : 05 Август 2016, 07:48:13 »
Как насчет такого, можно это как то использовать и как апач будет рулить по именам:
<VirtualHost *:80>
    ServerName first.ru
    ServerAlias [url]www.first.ru[/url]
    DocumentRoot /var/www/vhosts/first.ru/httpdocs
    ErrorLog logs/first.ru-error.log
</VirtualHost>
 
<VirtualHost *:80>
    ServerName second.ru
    ServerAlias [url]www.second.ru[/url]
    DocumentRoot /var/www/vhosts/second.ru/httpdocs
    ErrorLog logs/second.ru-error.log
</VirtualHost>

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26086
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #7 : 05 Август 2016, 08:19:50 »
Неверно. У сайта не должно быть двух имён. Выберите какое-то одно, а со второго сделайте редирект.

Пользователь добавил сообщение 05 Август 2016, 08:20:51:
как апач будет рулить по именам
Апач будет рулить по именам.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн AlexPebody

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
  • IT Engineer
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #8 : 05 Август 2016, 08:31:47 »
Хорошо, давайте попробую описать задачу так:

есть сайт site.ru его папка на сервере dir1
есть сайт sub.site.com его папка на сервере dir2

сайт на субдомене удалось разрулить и в итоге по запросу адреса: sub.site.com выводится не sub.site.com/dir2 а sub.site.com/
я хочу, чтобы точно также работало и на сайте с папкой dir1, имя у этого сайта другой и субдомена нет, мне удалось разрулить только до файла index.html, те выводит как я хочу, но только содержание этого файла, папки с ресурсами не проходят... я не знаю точную формулировку mod_rewrite для него. поэтому ПРОШУ ПОМОЧЬ.

я предположил что можно разрулить это дело через виртуальные хосты, но будет ли это работать? К примеру на виртуальном хосте сайт с субдоменом юудет отправляться в папку dir2/ а другой сайт с другим именем через свой виртуалхост, будет отправляться в папку dir1/

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

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26086
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #9 : 05 Август 2016, 09:19:10 »
Поймите одну простую вещь - все сайты независимы.
Где там каталоги находятся на диске - никого не… Про них знаете только вы, если вы никому не скажете - никто и знать не будет.
Хотя, конечно, то, что сайт потенциально доступен по пути внутри другого сайта - это не есть хорошо.
Лучше их разнести совсем.
А mod_rewrite тут вообще никаким боком не лежит.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #10 : 05 Август 2016, 09:53:41 »
AlexPebody, что-то не понятны разруливания.

А так, у Apache есть виртуальные хосты. Каждый хост имеет своё имя и директорию. Какое хочешь, такое имя и пишешь. Какая директория должна быть корневой, такую и указываешь. У каждого хоста своя корневая директория. Всё независимо, если не организуешь обратное.

Например, хост1:
имя = site.ru
директория = /path/to/dir1

Например, хост1:
имя = sub.site.com
директория = /path/to/dir2

Например, хост3:
имя = sub.sub.site.com
директория = /path/to/dir3

Как организуешь расположение директорий - твоё дело. Но, если dir2 лежит в /path/to/dir1, то соответственно и доступен будет как через sub.site.com, так и через site.ru/dir2.

Оффлайн AlexPebody

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
  • IT Engineer
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #11 : 07 Август 2016, 08:07:23 »
Большое спасибо! А как апач будет понимать что вызывается site.ru или sub.site.ru, с DNS знаком, но

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #12 : 07 Август 2016, 08:42:09 »
А как апач будет понимать что вызывается site.ru или sub.site.ru...

Веб-сервер это понимает из HTTP-запроса (значение "Host"). Если данного поля в запросе нет или хост не найден то выводится дефолтный.

Оффлайн AlexPebody

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
  • IT Engineer
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #13 : 08 Август 2016, 04:30:38 »
Спасибо, а дефолтный какой будет из них:

<VirtualHost *:80>
    ServerName first.ru
    ServerAlias www.first.ru
    DocumentRoot /var/www/vhosts/first.ru/httpdocs
    ErrorLog logs/first.ru-error.log
</VirtualHost>
 
<VirtualHost *:80>
    ServerName second.ru
    ServerAlias www.second.ru
    DocumentRoot /var/www/vhosts/second.ru/httpdocs
    ErrorLog logs/second.ru-error.log
</VirtualHost>

Или дефолтный будет тот что в основном файле конфига? Хотя там виртуалхост не прописан.

И собственно результаты, прописал я второй виртуалхост вот так (потому как *:80 это походу и есть дефолт):

<VirtualHost site.ru:80>
    ServerName site.ru
    ServerAlias www.site.ru
    DocumentRoot /var/www/site2
    ErrorLog logs/first.ru-error.log
</VirtualHost>

И, как я и считал, URL в строке адреса выглядит точно так же как и при простом mod_rewrite,
а именно: site.ru/dir1/, а нужно вот так: site.ru/

Пользователь добавил сообщение 08 Август 2016, 19:15:24:
К сожалению вот такой конфиг не работает:

<VirtualHost *:80>
   # The ServerName directive sets the request scheme, hostname and port that
   # the server uses to identify itself. This is used when creating
   # redirection URLs. In the context of virtual hosts, the ServerName
   # specifies what hostname must appear in the request's Host: header to
   # match this virtual host. For the default virtual host (this file) this
   # value is not decisive as it is used as a last resort host regardless.
   # However, you must set it for any further virtual host explicitly.
   #ServerName www.example.com

   #ServerAdmin it@prodsib.com
   #DocumentRoot /var/www/html
   DocumentRoot /var/www

   # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
   # error, crit, alert, emerg.
   # It is also possible to configure the loglevel for particular
   # modules, e.g.
   #LogLevel info ssl:warn

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   # For most configuration files from conf-available/, which are
   # enabled or disabled at a global level, it is possible to
   # include a line for only one particular virtual host. For example the
   # following line enables the CGI configuration for this host only
   # after it has been globally disabled with "a2disconf".
   #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

<VirtualHost sub.site.com>
   ServerName sub.site.com
   ServerAlias www.sub.site.com
   DocumentRoot /var/www/site
   ErrorLog ${APACHE_LOG_DIR}/box_error.log
   CustomLog ${APACHE_LOG_DIR}/box_access.log combined
</VirtualHost>

Никак! В строке адреса URL браузера: http://sub.site.com выводит index.php корня site.com и все!
Что только не крутил, толку 0 не выводит субдомен!



Пользователь добавил сообщение 08 Август 2016, 19:28:01:
ОМГ, все много проще вот так заработало,
ну почему же нигде нет нормальной документации В МЕЛОЧАХ?!

<VirtualHost *:80>
ServerName sub.site.com
ServerAlias www[dot]sub[dot]site[dot]com
DocumentRoot /var/www/site
ErrorLog ${APACHE_LOG_DIR}/box_error.log
CustomLog ${APACHE_LOG_DIR}/box_access.log combined
</VirtualHost>
« Последнее редактирование: 08 Август 2016, 19:28:01 от AlexPebody »

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: mod_rewrite сайт в папку
« Ответ #14 : 08 Август 2016, 20:13:24 »
Спасибо, а дефолтный какой будет из них:
<VirtualHost *:80>
    ServerName first.ru
    ...
</VirtualHost>
 
<VirtualHost *:80>
    ServerName second.ru
    ...
</VirtualHost>

Или дефолтный будет тот что в основном файле конфига? Хотя там виртуалхост не прописан.

Виртуальным хостом по умолчанию будет тот, что объявлен первым для своего IP:PORT.

В Ubuntu по-своему организован файл настройки: конечный файл настройки (apache2.conf) расделён на несколько файлов, расположенных в разных поддиректориях. Подробней написано в комментариях файла apache2.conf. Поэтому последовательность виртуальных хостов зависит от:
- очерёдности ссылок на файлы виртуальных хостов в директории sites-available;
- очерёдности записей в самих файлах виртуальных хостов.

Для дефолтного хоста предусмотрена ссылка на файл 000-default.conf, так как предполагается, что он загружается первым. Если этой ссылки не будет в директории sites-available, то дефолтным хостом будет тот, что указан в первом файле или ссылке на файл виртуального хоста.

« Последнее редактирование: 08 Август 2016, 21:41:30 от unimix »

 

Страница сгенерирована за 0.061 секунд. Запросов: 24.