ugrás a tartalomhoz

Automatikus aldomain a www könyvtár alkönyvtáraiból

thomasrc · 2007. Jún. 17. (V), 17.58
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 ?
 
1

2 megoldás

janoszen · 2007. Jún. 17. (V), 18.58
2 megoldás van, az egyik megoldás (a kevésbé tiszta) hogy mod_rewrite-olod a dolgot, a másik (a tisztább) hogy létrehozol minden mappára egy VirtualHostot. Ami a subdomaint illeti, annak vagy benne kell lennie a nameserverben vagy wildcard *.domain.hu formában kell lennie. Ergo otthoni szerver esetén bajos lesz, ha pl dyndns-sel dolgozol.
2

VirtualHost nem jó

thomasrc · 2007. Jún. 17. (V), 19.32
Hát VirtualHost az nem lenne jó, mert nem tudhatom hogy a különböző userek ( megvan osztva a gépemen lévő apache több távoli user között ) milyen könyvtárakat hoznak létre, illetve hogy miket törölnek ( jó ezeket lehet ellenőrizni egy kis "turkálással", de az nagy munka lenne ). A mod_rewrite -hez meg sajnos nem értek. Valami más megoldás nem létezik ?
3

Létezik...

janoszen · 2007. Jún. 17. (V), 20.36
Létezik megoldás, ha nem is valami szép:

RewriteEngine On
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.
4

meg lehet csinálni

Fraki · 2007. Jún. 17. (V), 20.46
A proclub által említett megoldásokról van szó. Egyrészt apache-ban lehet virtual hostokat beállítgatni, tipikusan minden hostnak egy-egy fájllal az apache hosts könyvtárában, de amint írtad, neked nem erre van szükséged.

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 %{REQUEST_URI}  !^/vsubdomains/
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!
5

Holnap megnézem

thomasrc · 2007. Jún. 17. (V), 21.12
Most nincs időm már megnézni, de holnap megnézem működik-e.

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...
6

.htaccess helye

Fraki · 2007. Jún. 17. (V), 21.59
Több .htaccess-ről beszélünk. Egyrészt a kérés befut a vhost docrootjába, ott egy .htaccess továbbítja a kérést a subdomain alapján a megfelelő könyvtárba, eddig erről volt szó, ebből egy darab van, a host docrootjában, és a user nem tudja törölni, mert nincs is hozzáférése.

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.
7

Egy kicsit másképp kéne

thomk · 2009. Okt. 15. (Cs), 18.18
Hali!
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!
8

DocumentRoot

Poetro · 2009. Okt. 15. (Cs), 18.57
A DocumentRoot-ot kellene az aktuális aldomain esetén átírni a megfelelő könyvtárra.
9

Ezt nem értem

thomk · 2009. Okt. 15. (Cs), 19.02
Kifejtenéd bővebben, ezen logikádat?
10

Ezekszerint annyit csináltál,

vbence · 2009. Okt. 16. (P), 09.12
Ezekszerint annyit csináltál, hogy a szerver válaszoljon a *.domain.hu címekre. Ez az első lépés. A második az, hogy az hogy mod_rewrite segítségével az URL-be illeszted az adlomain indormációit. A VirtualHost direktívába tedd be a következőket:
    RewriteEngine on
    RewriteCond %{HTTP_HOST} (.*).domain.hu [NC]
    RewriteRule (.*) /subdomains/%1$1 [L]
... így a valami.domain.hu/konyvtar címre belső átirányítás segítségével az apache a DOC_ROOT/subdomains/valami/konyvtar url-t szolgálja ki.
11

Újra itt

thomasrc · 2010. Jún. 11. (P), 16.28
Üdvözlök mindenkit újra!

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:
<VirtualHost *:80>
	ServerName domain.hu
	ServerAlias *.domain.hu
	ServerAdmin webmaster@localhost

	DocumentRoot /var/www/public_html/

	<Directory /var/www/public_html>
		Options Indexes FollowSymLinks
		AllowOverride All
		Order allow,deny
		Allow from all
	</Directory>

	RewriteEngine On

	RewriteCond %{HTTP_HOST} ^domain\.hu$
	RewriteRule . - [L]

	RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9\-_]+)\.domain\.hu$
	RewriteRule (.*) /%1/$1 [L]

	ErrorLog /var/www/access-logs/error.log
	CustomLog /var/www/access-logs/access.log combined

	php_admin_value doc_root "/var/www/public_html/"
	php_admin_value open_basedir "/var/www/:/usr/share/php:/usr/share/pear"
	php_admin_value upload_tmp_dir "/var/www/tmp"
	php_admin_value session.save_path "/var/www/tmp"
</VirtualHost>
Akkoriban ugye le volt tiltva az indexelés, ezért nem tűnt fel nekem.
12

Rewriteok

janoszen · 2010. Jún. 11. (P), 16.35
A Rewriteok sehogy nem fogják az environmentet átírni. Esetleg megpróbálhatod RewriteBase-el de ezt nem javaslom, inkább csináld meg rendesen.
13

Virtualhost

thomasrc · 2010. Jún. 11. (P), 20.59
Értem, végül megoldottam úgy, hogy kettéválasztottam a www-s és a wildcardos címet. Utóbbinál VirtualDocumentRoot van, így automatikusan "elkészülnek" az aldomaniek.
<VirtualHost *:80>
	ServerName domain.hu
	ServerAlias www.domain.hu
	ServerAdmin webmaster@localhost

	DocumentRoot /home/user1/public_html/

	<Directory /home/user1/public_html>
		Options Indexes FollowSymLinks
		AllowOverride All
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /home/user1/access-logs/error.log
	CustomLog /home/user1/access-logs/access.log combined

	php_admin_value doc_root "/home/user1/public_html/"
	php_admin_value open_basedir "/home/user1/:/usr/share/php/:/usr/share/pear/"
	php_admin_value upload_tmp_dir "/home/user1/tmp"
	php_admin_value session.save_path "/home/user1/tmp"
</VirtualHost>

<VirtualHost *:80>
	ServerAlias *.domain.hu
	ServerAdmin webmaster@localhost

	VirtualDocumentRoot /home/user1/public_html/%1

	<Directory /home/user1/public_html>
		Options Indexes FollowSymLinks
		AllowOverride All
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /home/user1/access-logs/error.log
	CustomLog /home/user1/access-logs/access.log combined

	php_admin_value doc_root "/home/user1/public_html/"
	php_admin_value open_basedir "/home/user1/:/usr/share/php/:/usr/share/pear/"
	php_admin_value upload_tmp_dir "/home/user1/tmp"
	php_admin_value session.save_path "/home/user1/tmp"
</VirtualHost>
Eddig úgy néz ki, működik.
14

VirtualDocumentRoot

janoszen · 2010. Jún. 11. (P), 21.17
A VirtualDocumentRoottal vigyázz, néhány PHP változót nem állít be.
15

általános v. localhost probléma?

tigrisur · 2011. Ápr. 5. (K), 14.06
A gondom a következő: joomlában csinálnék egy oldalt, ahol néhány funkció (fórum, néhány szekció, galéria) elérhető kell legyen a funkció.domain.hu formában is, ezek a joomlában persze a domain.hu/funkció címen vannak meg (igaz, csak virtuálisan). A dolgot megpróbáltam localhoston megcsinálni, de eddig nem igazán jött össze. A hosts-ban be van állítva, hogy a funkció.localhost a 127.0.0.1, a .htaccess-ben pedig így néz ki az átirányítás:
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?