Титла: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: djpatzo в May 24, 2010, 16:12 Значи пробвам и се мъча тука с един .htaccess файл. Та до момента какво съм драснал в него.
Код
Каква е идеята. До момента с този код като се опитам да отворя някой субдомейн. Примерно test.some.domain ме пренасочва към some.domain/users/test а искам да си остава така адреса както го въведа без да пренасочва до под-папката. Благодаря предварително Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: neter в May 24, 2010, 16:32 Т.е., искаш на потребителя да му се зареди some.domain/users/test, но в url полето на браузъра да си пише test.some.domain?
Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: djpatzo в May 24, 2010, 16:35 Да точно така. То ми е целта и ако може като се отварят страниците примерно index.php или news.php да не насочва отново /users/test ами да го отваря http://test.some.domain/index.php http://test.some.domain/news.php
Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: neter в May 24, 2010, 17:04 Не мога да ти кажа така наизуст как да го направиш, но може да се постигне, ще го докараме някак. Но сигурен ли си, че искаш да бъде така? Това е много лоша политика откъм SEO (Search Engine Optimization). Получава се дублиране на съдържание на различни адреси, а това никак не се нрави на търсачките.
Всъщност, сега се сещам, че можеш да постигнеш целта като насочиш dns записите на всички субдомейни, които искаш да отварят страницата (или направо всички субдомейни), към тази машина, но без да ги описваш в конфигурацията на apache, и да зададеш на default-ния VirtualHost да отваря папката /users/test. Когато някой опита да зареди някой от субдомейните, ще му се отваря default-ния VirtualHost, и ще се зарежда това, което искаш. Но, отново повтарям, това да зареждаш едно и също съдържание с различни адреси, е много лоша практика ;) Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: djpatzo в May 24, 2010, 17:09 Няма да е едно и също съдържание. Примерно с R=301 при RewriteRule ще се се насочва към различните папки. Т.е. всеки си качва каквото иска насочил съм всички поддомейни към /home/some.domain и от там съответно всеки който се регне се създава папка в Users и си има достъп до Mysql и FTP до тази папка.. Идеята е който каквото иска да си качва за сайт. Ако се сещаш hit.bg и free.bg са с нещо подобно, но не мога да разбера как са го направили..
Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: neter в May 24, 2010, 19:29 Най-сетне разбрах какво точно искаш да постигнеш. Но схемата, по която мислиш, отново е с дублиращо съдържание. Тези ще имат едно и също съдържане
Цитат some.domain/users/testтези ще имат едно и също съдържание Цитат some.domain/users/test1и т.н. Дублиращото съдържание не може да бъде избегнато, тъй като и субдомейнът трябва да може да се зарежда (все пак е крайната цел), и папката от основния домейн трябва да може да се зарежда, а не да се пренасочва към субдомейна (за да може субдомейнът да зареди съдържанието й). Освен това, за да става това, което искаш, пътят до папката от основния домейн трябва да се опише в .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 ($2), но, съдейки по домейна, който показваш, явно става дума за хостинг, а този модул забавя до известна степен работата на apache. Ако смяташ, че можеш да си позволиш малко разхищение на ресурси за целта, ползвай го, но за твоите цели не ти го препоръчвам. Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: djpatzo в May 24, 2010, 19:34 Благодаря за отговора. А случайно да знаеш как са автоматизирали hit.bg и free.bg своите регистрации. Как точно става номера с поддомейните
Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: go_fire в May 24, 2010, 20:29 Neter това дето даваш е много интересно, но поне аз виждам два проблема и двата във FAQ. Първо, очевидно това работи само на 1.3, което е огромен минус. Такива почти не останаха. И второ не могат да се променят стойностите с PHP, което значи на практика, че няма никакъв смисъл от динамичното зареждане през базата. Иначе щеше да е невероятно, ако беше истина.
Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: djpatzo в May 24, 2010, 21:06 Гледам, тук на сървъра, че при
Код ми излизат няколко интересни неща... Код
Последното е доста интересно, но до сега не съм работи с lighthttpd и не знам кое как е като настройки за виртуалните хостове... Намерих и нещо интересно за Httpd в CentOS-а, а може би и в останалите apache2 Код но като го направя изчезва главния домейн не може да се отвори. Ако някой има повече информация за VirtualDocumentRoot /home/some.domain/users/%0/ и съответно да се отварят подпапките автоматично в от главната директория където е примерно главния домейн(както казах, нещо става и не се отваря дава, че не може да намери / на сървъра) Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: neter в May 24, 2010, 21:18 Доста боб ще трябва да хвърля, за да разбера точно как са си направили системата :) По принцип има няколко начина за автоматизиране на действието. Да речем, че имаме страничка, в която е дадена възможност на потребителя да си въведе данните, за да се регистрира, след което трябва автоматично да му се конфигурират папките и VirtualHost-ът, без намесата на някой служител. Първо, една важна препоръка - за препоръчване е да пуснеш потребителските сайтове в chroot jail, защото иначе всеки, който ще има достъп да изпълнява команди през apache на сървъра ти, ще има достъп да огледа цялата ти система, а така също и да пише там, където му е позволено (поне в сайтовете на всички потребители ще му е позволено без chroot). С достъп да изпълняват команди през apache няма да са само кракерите отвън, а включително и всички твои потребители. А сега вариантите за автоматична регистрация:
Вариант 0: В /etc/sudoers позволяваме на потребителя на apache да може да изпълнява команди със sudo, след като си въведе паролата. Задаваме парола на потребителя, който ползва apache, и в системата за регистрация добавяме изпълнението на bash команда със sudo, като към sudo трябва да се добави -S и да се въведе паролата на потребителя на apache към изпълнението на командата. Пример: Код Трансформирай си го за езика, който ползваш, ако не използваш 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 минути. Ти избираш ;) Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: djpatzo в May 24, 2010, 21:26 Такааа.... Успях да го направя без проблем... Значи сега се създава през формата за регистрация в mysql още един запис, който прави фтп потребител и парола. Проблема е там, че сега за да може да се отваря някой сайт е нужно да се създаде папка, която се създава автоматично, но трябва да е накрая с some.domain, а тогава и потребителя трябва да е така. Сега тествах това с VirtualDocumentRoot но няма начин да стане ако папката е различна от потребител.some.domain . За правата не вярвам, понеже създадената директория няма нищо общо с apache. От къде ще вземе паролата на apache?, защото аз в /etc/sudoers не съм слагал apache потребителя, а и него го няма там. Всичко става дори и създаването на папките, когато някой от виртуалните ftp потребители се логне в фтп-то и се създава папка с права само за фтп потребителите. Apache няма нищо общо в случая с директориите, единственото общо е това със създаването в базата данни....
ЕДИТ: Току що забелязах нещо, че домейните и потребителските имена във free.bg са от типа потребител.free.bg така е и потребителя за фтп достъпа. Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: neter в May 24, 2010, 21:42 Neter това дето даваш е много интересно, но поне аз виждам два проблема и двата във FAQ. Първо, очевидно това работи само на 1.3, което е огромен минус. Такива почти не останаха. И второ не могат да се променят стойностите с PHP, което значи на практика, че няма никакъв смисъл от динамичното зареждане през базата. Иначе щеше да е невероятно, ако беше истина.Относно първото: Както се вижда, отдавна не съм се занимавал с този модул ;D Но може да се пише на автора - току виж се окаже, че прави някакви нови разработки по въпроса, които все още не са станали известни, или знае за някой, който е захванал да се занимава с това. Може и да му драсна някой ред тия дни. Чудя се дали нещо няма да ми изпадне, ако се заровя в сорса на неговия модул и в кода на apache... Както и да е, не е нещо, което ми се прави в момента, а и е много вероятно да не даде резултат :) Относно второто: Не си чел внимателно. Пише, че модулът не може да зарежда динамично от базата данни и други настройки около apache (там се говори за настройките на PHP), a не, че не може да се ползва PHP за записването на данните за VirtualHost-овете в базата данни. Можеш да запишеш данните в базата данни по стандартния начин за дадения език за писане в бази данни - модулът не играе никаква роля там. Модулът се задейства тогава, когато към apache се отправи заявка да зареди някой сайт. Тогава, когато apache чете конфигурациите си за VirtualHost-ове, се задейства и модулът за четене на VirtualHost-ове от базата данни. Невъзможността модулът да зарежда и други конфигурации, освен тези за VirtualHost-ове, идва от това, че в този момент apache търси конфигурации на VirtualHost-ове и нищо друго, и всяка друга информация се игнорира или дава грешка. Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: neter в May 24, 2010, 22:32 djpatzo, замених домейна ти от всички постове със some.domain, тъй като е своего рода реклама, което противоречи на т.7 от правилата ($2) на форума. Ще те помоля да не го слагаш за в бъдеще в постовете си.
По въпросите. Не е задължително потребителите ти да се казват така, както папките. Съвсем спокойно може потребителят в базата да е 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 права: Код както за всеки друг системен (не web) потребител. Прочети документацията на sudo, ако все още не ти е ясна картинката. Титла: Re: .htaccess субдомейн отварящ папка, но без пренасочване Публикувано от: djpatzo в May 24, 2010, 22:41 Аз го оправих вече и правя вече кода за активацията по мейл. Направих го като на свободно.бг с единствената разлика, че при мен потребителите, ще имат достъп до Mysql базите си данни и могат да си слагат каквито искат сайтове... Защитил съм с Php.ini да има safe_mode on да не може да се излиза от текущата директория, дори и да сложат шел и такива работи. По кода ми за регистрация не виждам дупки, но ще го споделя с Вас да видим какво ще кажете Вие, и ще си продължа темата в която описах как съм инсталирал до момента Proftpd с mysql и проверки за активациите. Ще стане готова система.
П.П.: Извинявам се за това с рекламата, но просто copy->paste от кодовете. |