Автор Тема: .htaccess субдомейн отварящ папка, но без пренасочване  (Прочетена 5747 пъти)

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Значи пробвам и се мъча тука с един .htaccess файл. Та до момента какво съм драснал в него.
Код
GeSHi (Bash):
  1. Options +FollowSymLinks  
  2. RewriteEngine  On
  3. RewriteBase /
  4. ErrorDocument 403 /error/noindex.html
  5. ErrorDocument 500 "Requested page do not exists"
  6. DirectoryIndex index.html index.php index.htm index.php3
  7.  
  8. Options -Indexes
  9.  
  10. RewriteCond %{HTTP_HOST} !www
  11. RewriteCond %{HTTP_HOST} !admin
  12. RewriteCond %{HTTP_HOST} !webmaster
  13. RewriteCond %{HTTP_HOST} ^([^*].*)\.some\.domain
  14. RewriteRule ^([^*]*)$  users/$1 [NC]
  15.  

Каква е идеята. До момента с този код като се опитам да отворя някой субдомейн. Примерно test.some.domain ме пренасочва към some.domain/users/test а искам да си остава така адреса както го въведа без да пренасочва до под-папката.

Благодаря предварително
« Последна редакция: May 24, 2010, 22:08 от neter »
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Т.е., искаш на потребителя да му се зареди some.domain/users/test, но в url полето на браузъра да си пише test.some.domain?
« Последна редакция: May 24, 2010, 22:08 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Да точно така. То ми е целта и ако може като се отварят страниците примерно index.php или news.php да не насочва отново /users/test ами да го отваря http://test.some.domain/index.php http://test.some.domain/news.php
« Последна редакция: May 24, 2010, 22:08 от neter »
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Не мога да ти кажа така наизуст как да го направиш, но може да се постигне, ще го докараме някак. Но сигурен ли си, че искаш да бъде така? Това е много лоша политика откъм SEO (Search Engine Optimization). Получава се дублиране на съдържание на различни адреси, а това никак не се нрави на търсачките.
Всъщност, сега се сещам, че можеш да постигнеш целта като насочиш dns записите на всички субдомейни, които искаш да отварят страницата (или направо всички субдомейни), към тази машина, но без да ги описваш в конфигурацията на apache, и да зададеш на default-ния VirtualHost да отваря папката /users/test. Когато някой опита да зареди някой от субдомейните, ще му се отваря default-ния VirtualHost, и ще се зарежда това, което искаш.
Но, отново повтарям, това да зареждаш едно и също съдържание с различни адреси, е много лоша практика ;)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Няма да е едно и също съдържание. Примерно с R=301 при RewriteRule ще се се насочва към различните папки. Т.е. всеки си качва каквото иска насочил съм всички поддомейни към /home/some.domain и от там съответно всеки който се регне се създава папка в Users и си има достъп до Mysql и FTP до тази папка.. Идеята е който каквото иска да си качва за сайт. Ако се сещаш hit.bg и free.bg са с нещо подобно, но не мога да разбера как са го направили..
« Последна редакция: May 24, 2010, 22:09 от neter »
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Най-сетне разбрах какво точно искаш да постигнеш. Но схемата, по която мислиш, отново е с дублиращо съдържание. Тези ще имат едно и също съдържане
Цитат
some.domain/users/test
test.some.domain
тези ще имат едно и също съдържание
Цитат
some.domain/users/test1
test1.some.domain
и т.н. Дублиращото съдържание не може да бъде избегнато, тъй като и субдомейнът трябва да може да се зарежда (все пак е крайната цел), и папката от основния домейн трябва да може да се зарежда, а не да се пренасочва към субдомейна (за да може субдомейнът да зареди съдържанието й). Освен това, за да става това, което искаш, пътят до папката от основния домейн трябва да се опише в .htaccess файла в папката на потребителя. Потребителят има право да пише в тази папка, и съвсем спокойно би могъл да промени папката там към папка на друг потребител, и така на неговия субдомейн да се зарежда сайтът на друг потребител, без никаква индикация, че съдържанието е взето от там (дори и фрейм няма) - все едно му крадеш сайта. Така че бих се учудил, ако въобще е дадена възможност за вписване на такова нещо в .htaccess.
Трябва ти съвсем друга схема. Всеки от виртуалните хостове (субдомейните) да бъде описан като VirtualHost със собствена папка в конфигурацията на apache. Така, когато някой зареди субдомейна, ще се зарежда съдържанието на този VirtualHost. За да не става дублиращо съдържание между субдомейна и съответстващата му папка в основния домейн, ще сложиш в папката на потребителя .htaccess файл, в който ще има R=301 към субдомейна, и ще кажеш на потребителите да не махат този ред, когато добавят свои правила в .htaccess-а, за да не пречат на SEO-то на сайта си.
Добавянето и махането на VirtualHost-ове от конфигурацията на apache не изисква цялостен рестарт на apache, а само reload, така че никой от останалите потребители няма да усеща, когато добавяш или махаш потребител от системата. За да не го правиш ръчно (добавянето/премахването на VirtualHost и reload-а на apache), можеш да си напишеш скриптче за целта, което лесно да извикваш, когато се налага. Описвай VirtualHost-овете в отделен файл, и include-вай този файл в основния конфигурационен файл на apache (httpd.conf, apache2.conf, или там, както се казва твоят), за да правиш редакциите по-лесно, без да ти се пречкат останалите конфигурации на apache. Дори можеш да си направиш някакъв интерфейс, в който да въвеждаш само променливите (име на хоста, папка...), да пазиш тези данни в база данни, и скриптът, когато се изпълни, да чете от тази база данни, да генерира VirtualHost-овете, да ги плесва в конфигурацията на apache и да reload-ва сървъра.
Логично изниква въпросът "А няма ли начин VirtualHost-овете да се четат динамично от базата данни, вместо да се въвеждат в конфигурационни файлове?". Има, модулът за apache се нарича ShapVH, но, съдейки по домейна, който показваш, явно става дума за хостинг, а този модул забавя до известна степен работата на apache. Ако смяташ, че можеш да си позволиш малко разхищение на ресурси за целта, ползвай го, но за твоите цели не ти го препоръчвам.
« Последна редакция: May 24, 2010, 22:09 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Благодаря за отговора. А случайно да знаеш как са автоматизирали hit.bg и free.bg своите регистрации. Как точно става номера с поддомейните
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Neter това дето даваш е много интересно, но поне аз виждам два проблема и двата във FAQ. Първо, очевидно това работи само на 1.3, което е огромен минус. Такива почти не останаха. И второ не могат да се променят стойностите с PHP, което значи на практика, че няма никакъв смисъл от динамичното зареждане през базата. Иначе щеше да е невероятно, ако беше истина.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Гледам, тук на сървъра, че при
Код
GeSHi (Bash):
  1. [root@localhost ~]# yum search httpd
ми излизат няколко интересни неща...
Код
GeSHi (Bash):
  1. lighttpd.i386 : Lightning fast webserver with light system requirements
  2. lighttpd-fastcgi.i386 : FastCGI module and spawning helper for lighttpd and PHP configuration
  3. lighttpd-mod_geoip.i386 : GeoIP module for lighttpd to use for location lookups
  4. lighttpd-mod_mysql_vhost.i386 : Virtual host module for lighttpd that uses a MySQL database

Последното е доста интересно, но до сега не съм работи с lighthttpd и не знам кое как е като настройки за виртуалните хостове... Намерих и нещо интересно за Httpd в CentOS-а, а може би и в останалите apache2
Код
GeSHi (Bash):
  1. VirtualDocumentRoot /home/some.domain/users/%0/
но като го направя изчезва главния домейн не може да се отвори. Ако някой има повече информация за VirtualDocumentRoot /home/some.domain/users/%0/ и съответно да се отварят подпапките автоматично в от главната директория където е примерно главния домейн(както казах, нещо става и не се отваря дава, че не може да намери / на сървъра)
« Последна редакция: May 24, 2010, 22:10 от neter »
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Доста боб ще трябва да хвърля, за да разбера точно как са си направили системата :) По принцип има няколко начина за автоматизиране на действието. Да речем, че имаме страничка, в която е дадена възможност на потребителя да си въведе данните, за да се регистрира, след което трябва автоматично да му се конфигурират папките и VirtualHost-ът, без намесата на някой служител. Първо, една важна препоръка - за препоръчване е да пуснеш потребителските сайтове в chroot jail, защото иначе всеки, който ще има достъп да изпълнява команди през apache на сървъра ти, ще има достъп да огледа цялата ти система, а така също и да пише там, където му е позволено (поне в сайтовете на всички потребители ще му е позволено без chroot). С достъп да изпълняват команди през apache няма да са само кракерите отвън, а включително и всички твои потребители. А сега вариантите за автоматична регистрация:
Вариант 0: В /etc/sudoers позволяваме на потребителя на apache да може да изпълнява команди със sudo, след като си въведе паролата. Задаваме парола на потребителя, който ползва apache, и в системата за регистрация добавяме изпълнението на bash команда със sudo, като към sudo трябва да се добави -S и да се въведе паролата на потребителя на apache към изпълнението на командата. Пример:
Код
GeSHi (PHP):
  1. exec("echo 'apache_парола' | /usr/bin/sudo -u apache_потребител -S команда");
Трансформирай си го за езика, който ползваш, ако не използваш PHP за изписването на сайта. Проблем откъм сигурността е, че паролата на apache потребителя е вписана във файл, достъпен от Интернет, и ако някой успее да се добере до кода на сайта и достъп да изпълнява команди, ще може да изпълнява команди с root права, след като види паролата. За страницата за регистрации ти трябва отделна инсталация на apache без chroot и с различен потребител от основната инсталация, но проблемът остава, ако някой се вмъкне в системата през страницата за регистрации.

Вариант 1: Същото, като предния вариант, но не се слага парола на потребителя на apache, а в /etc/sudoers се описва, че потребителят на apache може да изпълнява команди през sudo без парола. Тогава няма да имаш нужда от -S към sudo, и няма да има нужда да описваш паролата в командата, но ако някой се добере до достъп да изпълнява команди, ще може да изпълнява команди с root права без дори да търси парола, с която да го прави. Всеки един от твоите потребители ще има възможността да го направи, стига да се сети да използва sudo в някоя команда. За страницата за регистрации ти трябва отделна инсталация на apache без chroot и с различен потребител от основната инсталация, но проблемът остава, ако някой се вмъкне в системата през страницата за регистрации.

Вариант 2: За регистрациите използваш cgi скрипт със suid за root, в който скрипт задаваш изпълнението на нужните команди за добавяне на потребител. Проблемите със сигурността при този вариант са горе-долу същите, както при вариант 0. За страницата за регистрации ти трябва отделна инсталация на apache без chroot и с различен потребител от основната инсталация, но проблемът остава, ако някой се вмъкне в системата през страницата за регистрации.

Вариант 3: Променяш правата на папките и файловете с конфигурацията на apache, а така също променяш правата за изпълнението на apache така, че потребителят на apache да може да действа там, а не само root. Така потребителят на apache ще може да редактира VirtualHost-овете и да reload-ва сървъра, и няма да има нужда да му даваш позволение да изпълнява с root права. По този начин, ако някой получи достъп до системата ти, няма да може да изпълнява команди с root права, но ще може да пипа по работата на apache. За страницата за регистрации ти трябва отделна инсталация на apache без chroot и с различен потребител от основната инсталация, но проблемът остава, ако някой се вмъкне в системата през страницата за регистрации. Не съм си играл с този вариант, така че не мога да те упътя за всичко, което трябва да се направи при него.

Вариант 4: Страницата с регистрации няма да оперира с VirtualHost-овете и няма да reload-ва сървъра, а само ще въвежда потребителските данни в някаква база данни. Работата с VirtualHost-овете и reload-ването на сървъра ги слагаш в скрипт, недостъпен за потребителя на apache, който скрипт слагаш да се върти през удобен за теб период от време от crontab-а на root. При всяко свое изпълнение този скрипт ще чете информацията от базата данни с потребителите, ще създава нужните папки, ще добавя и маха VirtualHost-ове, спрямо нея и ще reload-ва сървъра (за предпочитане е да reload-ва, само ако е имало потребители за добавяне/махане). Не ти трябва отделна инсталация на apache, а недостатъкът е, че потребителят трябва да чака някакво време, докато скриптът се изпълни и акаунтът му се създаде.

Вероятно има и други варианти, за които не се сещам в момента (въпрос на въображение), но и тези са достатъчно, за да дадат избор. Аз ти препоръчвам вариант 4, тъй като е най-сигурен, дори и да се налага потребителят да чака няколко часа, докато му се създаде акаунтът. То такъв голям период едва ли ще е нужен да се задава на crontab-а (трябва да имаш наистина много потребители), вероятно ще са ти достатъчни от 5 до 30 минути. Ти избираш ;)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Такааа.... Успях да го направя без проблем... Значи сега се създава през формата за регистрация в mysql още един запис, който прави фтп потребител и парола. Проблема е там, че сега за да може да се отваря някой сайт е нужно да се създаде папка, която се създава автоматично, но трябва да е накрая с some.domain, а тогава и потребителя трябва да е така. Сега тествах това с VirtualDocumentRoot но няма начин да стане ако папката е различна от потребител.some.domain . За правата не вярвам, понеже създадената директория няма нищо общо с apache. От къде ще вземе паролата на apache?, защото аз в /etc/sudoers не съм слагал apache потребителя, а и него го няма там. Всичко става дори и създаването на папките, когато някой от виртуалните ftp потребители се логне в фтп-то и се създава папка с права само за фтп потребителите. Apache няма нищо общо в случая с директориите, единственото общо е това със създаването в базата данни....

ЕДИТ: Току що забелязах нещо, че домейните и потребителските имена във free.bg са от типа потребител.free.bg така е и потребителя за фтп достъпа.
« Последна редакция: May 24, 2010, 22:11 от neter »
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Neter това дето даваш е много интересно, но поне аз виждам два проблема и двата във FAQ. Първо, очевидно това работи само на 1.3, което е огромен минус. Такива почти не останаха. И второ не могат да се променят стойностите с PHP, което значи на практика, че няма никакъв смисъл от динамичното зареждане през базата. Иначе щеше да е невероятно, ако беше истина.
Относно първото: Както се вижда, отдавна не съм се занимавал с този модул ;D Но може да се пише на автора - току виж се окаже, че прави някакви нови разработки по въпроса, които все още не са станали известни, или знае за някой, който е захванал да се занимава с това. Може и да му драсна някой ред тия дни. Чудя се дали нещо няма да ми изпадне, ако се заровя в сорса на неговия модул и в кода на apache... Както и да е, не е нещо, което ми се прави в момента, а и е много вероятно да не даде резултат :)

Относно второто: Не си чел внимателно. Пише, че модулът не може да зарежда динамично от базата данни и други настройки около apache (там се говори за настройките на PHP), a не, че не може да се ползва PHP за записването на данните за VirtualHost-овете в базата данни. Можеш да запишеш данните в базата данни по стандартния начин за дадения език за писане в бази данни - модулът не играе никаква роля там. Модулът се задейства тогава, когато към apache се отправи заявка да зареди някой сайт. Тогава, когато apache чете конфигурациите си за VirtualHost-ове, се задейства и модулът за четене на VirtualHost-ове от базата данни. Невъзможността модулът да зарежда и други конфигурации, освен тези за VirtualHost-ове, идва от това, че в този момент apache търси конфигурации на VirtualHost-ове и нищо друго, и всяка друга информация се игнорира или дава грешка.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
djpatzo, замених домейна ти от всички постове със some.domain, тъй като е своего рода реклама, което противоречи на т.7 от правилата на форума. Ще те помоля да не го слагаш за в бъдеще в постовете си.

По въпросите. Не е задължително потребителите ти да се казват така, както папките. Съвсем спокойно може потребителят в базата да е test, субдомейнът му да е test.some.domain, ftp потребителят да е test, и папката да се казва test.dome.domain. Просто в скрипта за регистрация добавяй стринга ".some.domain" там, където искаш да се въведе цялото име. Т.е., при регистрацията, ако вкарваш името на потребителя в една променлива $username, то при реда за запис на потребителя в базата ползвай само променливата $username. При създаването на папката ползвай $username.".some.domain" (изписвам го в PHP синтаксис, приведи си го към езика, който използваш), в скрипта за VirtualHost-а ползвай "ServerName ".$username.".some.domain", и т.н.
За кои права не вярваш? Аз говорех за промяна на правата на системните папки и файлове на apache (тези в /etc), а не за тези на потребителите. Но щом не си го разбрал, по-добре не гледай този вариант, че може да направиш голямо мазало.
Знам, че текущо нямаш въведен потребителя на apache в /etc/sudoers. Във вариантите, където споменавам ползването на /etc/sudoers, трябва да добавиш потребителя на apache във файла /etc/sudoers със съответните права. Да вметна, че не става дума за потребителските акаунти, а за потребителя, с който работи apache сървърът (вписан е в конфигурацията на apache). Парола за потребителя на apache можеш да зададеш с bash команда с root права:
Код
GeSHi (Bash):
  1. passwd потребител_на_apache
както за всеки друг системен (не web) потребител. Прочети документацията на sudo, ако все още не ти е ясна картинката.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Аз го оправих вече и правя вече кода за активацията по мейл. Направих го като на свободно.бг с единствената разлика, че при мен потребителите, ще имат достъп до Mysql базите си данни и могат да си слагат каквито искат сайтове... Защитил съм с Php.ini да има safe_mode on да не може да се излиза от текущата директория, дори и да сложат шел и такива работи. По кода ми за регистрация не виждам дупки, но ще го споделя с Вас да видим какво ще кажете Вие, и ще си продължа темата в която описах как съм инсталирал до момента Proftpd с mysql и проверки за активациите. Ще стане готова система.

П.П.: Извинявам се за това с рекламата, но просто copy->paste от кодовете.
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
htaccess tutorial
Настройка на програми
marteen 1 2288 Последна публикация Jan 10, 2005, 14:02
от
Проблем с апаче и .htaccess!
Настройка на програми
never_mind 2 2565 Последна публикация Dec 24, 2006, 22:45
от never_mind
Проблем свързан с .htaccess
Настройка на програми
Maverick_bg 18 6202 Последна публикация Sep 28, 2009, 22:56
от Maverick_bg
Не ми работи .htaccess?
Настройка на програми
heminei 4 2697 Последна публикация Aug 02, 2010, 13:54
от vm13
Проблем с RewriteRule в .htaccess
Web development
NikolaiTalev 10 3619 Последна публикация Jan 21, 2011, 00:25
от NikolaiTalev