Automatikus aldomain a www könyvtár alkönyvtáraiból
Sziasztok !
Lehet sokat kérdezek mostanában...
Azt szeretném megvalósítani Apache 2.2.4 alatt ( php 5.2.3 ha ezis kell ), hogy vannak az userek könyvtárai ( H:/users/n/na/name/www/ ). Minden usernek a www könyvárában lévő dolgok látszódnak a neten ( ami a példa esetében a "H:/users/n/na/name/www/" könyvtárban lévő dolgok látszódnak ). És én azt szeretném, hogy ha a www mappában létrehoz az user egy "haver" mappát, akkor az a mappa egyben aldomain is legyen ( haver.valami.hu ), de ellehesen érni "normálisan" is a mappát ( valami.hu/haver ). Ezt valahogy meglehet csinálni, mert láttam egy fizetős tárhelyszolgáltatónál, hogy így oldják meg az aldomain dolgokat. A rendszer: Windows Vista. Vagy ezt csak Linux alatt lehet megcsinálni ?
■ Lehet sokat kérdezek mostanában...
Azt szeretném megvalósítani Apache 2.2.4 alatt ( php 5.2.3 ha ezis kell ), hogy vannak az userek könyvtárai ( H:/users/n/na/name/www/ ). Minden usernek a www könyvárában lévő dolgok látszódnak a neten ( ami a példa esetében a "H:/users/n/na/name/www/" könyvtárban lévő dolgok látszódnak ). És én azt szeretném, hogy ha a www mappában létrehoz az user egy "haver" mappát, akkor az a mappa egyben aldomain is legyen ( haver.valami.hu ), de ellehesen érni "normálisan" is a mappát ( valami.hu/haver ). Ezt valahogy meglehet csinálni, mert láttam egy fizetős tárhelyszolgáltatónál, hogy így oldják meg az aldomain dolgokat. A rendszer: Windows Vista. Vagy ezt csak Linux alatt lehet megcsinálni ?
2 megoldás
VirtualHost nem jó
Létezik...
RewriteBase /
RewriteCond %{HTTP_HOST} ^domainem\.hu$
RewriteRule . - [L]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9\-_]+)\.domainem\.hu$
RewriteRule (.*) /%1/$1 [L]
Elvileg így mennie kell, de nem próbáltam ki. Egyszerűbb lenne írni egy admin panelt vagy használni egy készet, ami létrehozza a virtual hostokat.
meg lehet csinálni
Neked a virtual subdomains nevű játékra van szükséged (erre a kulcsszóra jó forrásokat találsz a neten, kezdve az apache doksitól), ami tényleg jó móka, én is alkalmazom (méghozzá dyndns-en :)), fejlesztéshez például hagyon hasznos dev játszótereknek, amikor szükséged van rá, hogy domain root alatt fejlessz (például a gyökérhivatkozások miatt). Azt nem tudom, miért lenne ez "kevésbé tiszta", hiszen bevett módszer, mással nem is nagyon lehet ezt megcsinálni. Tökmindegy, mi a rendszer, nekem windowson is (appserv) és linuxon is megy (az apache-on van a lényeg).
Elsősorban is a nameszerveren engedélyezni kell a maszkolást. Ezt dyndns-en egy "Enable Wildcard" nevű checkbox-szal el lehet intézni, fizetős DNS-szolgáltatót pedig legrosszabb esetben fel kell hívni, és meg kell kérni szépen az ügyintézőt, hogy pipálja be neked.
Ezután már minden *.akarmi.hu kérés a te IP-címedre fog érkezni. Ezeket apache-ból le kell kezelned. Ehhez az akarmi.hu vhost beállításainál aliasnak add meg a *.akarmi.hu-t. (Valamint tanácsos név alapon kezelni a vhostokat, de ez nem kötelező.) Innentől már minden kérés be fog futni az akarmi.hu document rootjába, ez már a célegyenes.
Itt .htaccess-ből mod_rewrite-tal minden kérést a megfelelő könyvtárba irányítasz, a net tele van ilyen mod_rewrite-mintával, magyarázatokkal, de bekopizom az enyémet.
RewriteCond %{HTTP_HOST} !^www\.akarmi\.hu$
RewriteCond %{HTTP_HOST} ^([\w-]+)\.akarmi\.hu$
RewriteRule (.*) /vsubdomains/%1/$1
A szabály minden *.akarmi.hu alakú kérést az akarmi.hu/vsubdomains/* nevű mappába irányít. Ez alól kivétel a www.akarmi.hu, azt meghagyjuk az akarmi.hu aliasaként (2. sor), valamint ki kell zárni az újraírás alól a hagyományos elérést is, mert akkor végtelen újraíróciklus keletkezne (1. sor). A harmadik sorban megjegyeztetjük a subdomaint (erre %1-gyel hivatkozunk később), a negyedikben pedig a domain alatti teljes elérési utat továbbítjuk a megfelelő könyvtárba.
Természetesen lehetőség van a home könyvtárakra irányítani is, azt hiszem az apache doksiban van erre is példa.
Ha elakadsz, szólj!
Holnap megnézem
Egy kérdés: te .htaccess -t említettél. Ezt hova tegyem ? Mert én úgy csinálom hogy az usereknek adok 3 könyvtárat ( stat, www, log ), amikből a www könyvtár tartalma érhető el weben ( a stat meg a log, csak ftp-n ). Na most akkor a htaccess fájlt a www könyvtárba tegyem, vagy a www/mappa/ könyvtár(ak)ba ? Meg egy másik kérdés: Mivan ha kitörli a tisztelt user a htaccess fájlt ? Mert az nem lenne szerencsés dolog...
.htaccess helye
Emellett a user minden egyes könyvtárában a www alatt szintén lehetnek .htaccess-ek, amiket ő hoz létre, töröl, módosít stb., az az övé, hiszen a saját subdomain-je alatt ő továbbra is újrairkálhat. Az apache "felülről" haladva minden .htaccess-t feldolgoz. Az is lehetséges, hogy a user csinál egy al könyvtárat, mondjuk www/alkonyvtar, és abba is rakhat egy .htaccess-t, ez esetben akár 3 .htaccess is lefut, mire az oldal megjelenik.
Egy kicsit másképp kéne
Kíváncsian én is ide tévedtem, és megcsináltam én is a webszerómon.
Csak nekem az a problem, hogy nem kéne hogy mutassa a mappát ahol van az oldal.
Tehát:
Beírom aldomain.domain.hu ezen az oldalon van egy link ami egy másik mappában lévő fájlra mutat. De az aldomainnév mappán belül.
A könyvár rendszer így van: E:/Szerver/Http Szerver/subdomains/aldomainnév
És ezen belül mutat a link E:/Szerver/Http Szerver/subdomains/aldomainnév/letoltesek.
Ez a böngészőbe így jelenik meg és ez a problem:
aldomain.domain.hu/subdomains/aldomainnev/letoltesek
és így lenne nekem jó:
aldomain.domain.hu/letoltesek
Ezt hogy lehet megoldani?
A választ előre is köszönöm!
DocumentRoot
Ezt nem értem
Ezekszerint annyit csináltál,
valami.domain.hu/konyvtar
címre belső átirányítás segítségével az apache aDOC_ROOT/subdomains/valami/konyvtar
url-t szolgálja ki.Újra itt
A topik nyitása óta eltelt három év, s újra a témanyitó hozzászólásban említett dolgot szeretném megvalósítani.
Kipróbáltam a hozzászólásokban említett rewrite szabályokat, működnek is, DE:
- Az apache konfig fájlában lévő aliasok nem működnek a rewrite szabállyal létrehozott aldomainek alatt. Ez főleg azért fontos, mert pl. az indexeléshez szükség van az ikonokra (ami "/icon/"-ként van beállítva aliasként), s mivel az aliasok nem érvényesülnek, ezért aztán hiányoznak az ikonok.p
Ezt valahogy ki lehet védeni? Jelenleg így néz ki az egyik virtualhost:
Rewriteok
Virtualhost
VirtualDocumentRoot
általános v. localhost probléma?
RewriteCond %{HTTP_HOST} ^[^.]+\.localhost$
RewriteRule ^([^.]+)\.localhost(/.*)? %{HTTP_HOST}/$1$2
Igen ám, csak ez a valódi átirányítást nem a localhost/funkcióra csinálja meg, hanem csak a localhost gyökérre. Mit csinálok rosszul?