Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak zrobić użytkownik.domena.pl
Forum PHP.pl > Forum > Serwery WWW > Apache
mal2065
Witam,

piszę stronę, która ma umożliwić użytkownikom tworzenie swoich stron.

Strony maja być dostępne pod adresem www.uzytkownik.domena.pl. Pliki strony użytkownika znajdują się w katalogu www.domena.pl/litera/uzytkownik. Jak to zrobić? Czy wystarczy przekierowanie mod_rewrite? Jeśli tak, to jakie?


Mam hosting, który umożliwia mi utworzenie tylko kilku subdomen, a więc opcja fizycznego ich tworzenia nie wchodzi w grę... Moduł mod_rewite jest aktywny. Moduł mod_vhost_alias prawdopodobnie nie jest aktywny- nie ma o nim w zmianki przy wywołaniu phpinfo() na docelowej stronie. Hosting w komercyjnej firmie.


Będę wdzięczny za jak najbardziej szczegółową informację.
ShadowD
Nie jestem pewien ale wydaje mi się, że jeśli masz domenę wykupioną na własność nie jakieś darmowe typu xt.pl to jesteś w stanie w pliku .htaccess dać przekierowanie i powinno być ok, jak znajdę mój skrypt to Ci podeślę...

Ok mam coś:
RewriteCond %{HTTP_HOST} ^stronawww.pl$ [NC]

Musisz pokombinować nie gwarantuje, że można to osiągnąć dzięki^^...
kwiateusz
w dns ustawia sie wildcard, dzieki czemu wszystkie zapytania sa kierowane do domena.pl i w index.php sprawdzasz sobie jaki był adres i z niej wyciagasz sobie nazwe uzytkownika smile.gif
mal2065
Dzięki za podpowiedzi..

ShadowD
Mam domenę wykupioną na własność i w pliku .htaccess mam już inne przekierowania typu www.domena.pl/rej.php?key=123 na www.domena.pl/rej/123, ale chodzi mi właśnie o takie "wirtualne" subdomeny użytkownika.. spróbuję Twojego skryptu.

kwiateusz
Czy możesz mi wskazać, gdzie znajdę takie ustawienia? Domenę mam w xxx.pl i tam ustawiam sobie przekierowanie na zewnętrzne DNS yyy.pl, gdzie mam hosting.

"i w index.php sprawdzasz sobie jaki był adres i z niej wyciagasz sobie nazwe uzytkownika" -> czy możesz mi również wskazać jakieś tutoriale uczące takiego podejścia? Rozumiem, że np. sprawdzam w pliku index.php w głównym katalogu nazwę użytkownika i pokazuję treści dla niego przeznaczone? Czy takie podejście jest lepsze, czy może utworzenie dla każdego z użytkowników osobnego katalogu z plikami i przekierowanie wg nazwy użytkownika do jego katalogu z plikami?
kwiateusz
na yyy.pl powinieneś mnieć dostep do zarzadzania wpisami w dns, jesli nie masz to napisz do admina zeby dodał wildcard do Twojej domeny, http://www.vealheim.com/php-mysql/subdomen...card-dns-i-php/ przydatny link, głównie ten listing z php.

jak juz okreslisz jaki to użytkownik to możesz zrobic dowolne rzeczy smile.gif czy zaincludujesz plik iz jego katalogu, czy pokazesz cos z z bazy, pełna dowolność smile.gif
mal2065
Dzięki wielkie biggrin.gif

Teraz mam tylko nadzieję, że mi to ustawią.
ShadowD
Teraz ja mam pytanie jeśli wpisze w pasek www.shadowd.aid.pl przekieruje mnie na aid.pl czy nadal w pasku będzie shadowd.aid.pl??
mal2065
Witam ponownie!

Chciałem zadać jeszcze pytanie.

Czy powyższe rozwiązania tj.:

1. zastosowanie wildcarda - użytkownik wpisuje w pasek adresu cos.domena.pl i przenosi go do katalogu głównego, gdzie skrypt decyduje o tym, co dalej wyświetlić na podstawie tego, czym było "cos"
2. przekierowanie mod rewrite typu www.uzytkownik.domena.pl -> www.domena.pl/uzytkownik/

są ze sobą związane i należy ich użyć razem, aby osiągnąć efekt uzytkownik.domena.pl, czy też każdego z nich można użyć z osobna i każde da ten efekt. I przyłącze się do poprzednika - w jaki sposób osiągnąć efekt (dla technik 1 i 2), aby w pasku przeglądarki widoczny był adres uzytkownik.domena.pl?

Czy są jakieś tutoriale do tego tematu? Post pod linkiem http://www.vealheim.com/php-mysql/subdomen...card-dns-i-php/ nie jest dla mnie zbyt wyczerpujący...
AxZx
a czy masz dostęp do httpd oraz do konfiguracji DNS?
mal2065
httpd - czyli, katalog z plikami strony? - tak, mam dostęp
dns - jedyne ustawienia dns, do jakich mam dostęp, to adres dnsów w panelu konfiguracji domeny
ShadowD
Moim zdaniem pkt 2 jest lepszym rozwiązaniem poszukałem i znalazłem stronkę która powinna Ci pomóc:

http://serwis.magazynyinternetowe.pl/artyk...rem_apache.html
kwiateusz
tylko czy mi sie wydaje czy w przypadki mod_rewrite te wszystkie subdomeny trzebaby tworzyć recznie? bo powiem szczerze nie wykorzystywałem mod_rewrite do tego jeszcze smile.gif
mal2065
Dzięki przyda się na pewno. Tym bardziej, że jest przykład. I tak myślę sobie, że skoro jest to przekierowanie i wpisanie w pasek adresu, który i tak będzie interpretowany, żeby pokazać zawartość katalogu, to subdomena nie musi chyba istnieć nawet..

Bardzo Wam dziękuję. Zajmę się teraz plikiem .htaccess i dalej monitoruję wątek, bo ciekawie się robi biggrin.gif
ShadowD
Cytat(kwiateusz @ 28.11.2008, 17:32:11 ) *
tylko czy mi sie wydaje czy w przypadki mod_rewrite te wszystkie subdomeny trzebaby tworzyć recznie? bo powiem szczerze nie wykorzystywałem mod_rewrite do tego jeszcze smile.gif


Ja też nie, ale udało mi się znaleźć ciekawy artykuł który opisuje jak to zrobić zresztą w jednym z pierwszych postów pisałem o tym. Trzeba tylko zwracać uwagę czy piszemy $1 czy %1 bo to dwie inne rzeczy i dzięki temu, że istnieje coś takiego jak %1 możemy nie znając nazw subdomen bawić sie nimi do woli a nawet subdomenami subdomen...

Przykład:
Kod
1. RewriteCond %{HTTP_HOST} strona.pl [NC]
2. RewriteCond %{HTTP_HOST} (.*).strona.pl [NC]
3. RewriteRule .* /%2%{REQUEST_URI}


Pozdrawiam...
mal2065
Witam,

dla wszystkich, którzy przeglądają wątek i chcieliby po prostu zrobić sobie subdomeny, nie wnikając w mod_rewrite i nie martwią się wydajnością. Znalazłem kilka skryptów, które są właściwie banalne, ale powinny robić to, co założono w temacie...

http://www.milliscripts.com/
http://sourceforge.net/projects/subsystem/

może komuś się przyda, bo mi nie...

sposób ich działania przedstawiony niżej; kod znajduje się w głównym pliku index.php, gdzie trafia odwiedzający po wpisaniu adresu www i dopiero stąd jest kierowany do katalogu z plikami właściwymi dla "subdomeny", lub na stronę główną, którą trzeba sobie wpisać na sztywno w skrypcie.

Kod
   $subhost = $_SERVER['HTTP_HOST'];
   $subhost = strtolower($subhost);
  
   $subhost = str_replace("www.", "", $subhost);
   $subhost2 = strstr($subhost, "/");
  
   if ($subhost2) {
       $subhost = str_replace($subhost2, "", $subhost);
       }
   if($subhost=="$maindomain" || $subhost=="www.$maindomain") {
       header("Location: http://www.$maindomain/$startpage");
       exit;
       }
  
   if($_SERVER['REQUEST_URI']=="/") {
       $subhost2 = "";
       }
   else {
       $subhost2 = $_SERVER['REQUEST_URI'];
       }
ShadowD
Dla tych którym zależy na prędkości i lubią pliki .htaccess polecam moje rozwiązanie:

1. Włączamy wildcard
2. przykładowy kod:
Kod
RewriteEngine On

#domena www.cmsss.pl
#dodanie 'www.'
RewriteCond %{HTTP_HOST} !^www [NC]
RewriteCond %{HTTP_HOST} ^([a-z0-9.]*).domena.pl$ [NC]
RewriteRule ^(.*)$ http://www.%1.domena.pl/$1 [L]

#przekierowywania www
RewriteCond %{HTTP_HOST} ^www.([a-z0-9]*).domena.pl$ [NC]
RewriteCond %{REQUEST_URI} !^/users/[a-z0-9]*/www.*$ [NC]
RewriteRule ^([a-zA-Z0-9/.?]*)$ /users/%1/www/$1 [L]

Powyższy kod gwarantuje przekierowanie z:
- www.USER.domena.pl$
- USER.domena.pl$
Na:
www.domena.pl/USER/www/$

Ps Dlaczego kwiateusz dostał '+' a ja nie. (Pytanie retoryczne) ;p

Pozdrawiam
mal2065
A jak już piszesz taki kod, to mógłbym Cię poprosić o dodanie do niego następującej rzeczy?

* sprawdzenie, czy subdomena istnieje - jeśli nie, to przekierowanie na katalog główny "domena.pl" (czy "www.domena.pl")
* i tak na szybko, czy w pasku adresu cały czas pozostanie adres postaci uzytkownik.domena.pl
* i jeszcze coś -> jak "maskować" taki adres uzytkownik.domena.pl/kontakt/ (friendly urls)

Wszystko dla rozpatrywanego i opisanego przez Ciebie kodem przypadku. W ostatnim punkcie chodzi mi o to,jak w przypadku już i tak skomplikowanych dla mnie przekierowań zadbać o friendly urls i jak wtedy wyglądają linki do poszczególnych stron - np. dla tego uzytkownika "kontakt.php"?

Bardzo Ci dziękuję za pomoc! (nawet bez odpowiedzi na te pytania biggrin.gif )
ShadowD
1. Istnieje tz?? Ona zawsze istnieje ponieważ jest włączony wildcard, jedyne co mi przychodzi do głowy to wykorzystanie error 404 lub sprawdzenie czy dany katalog istnieje. Gdy wystąpi błąd 404 czyli gdy nie będzie danego użytkownika zostanie on przekierowany na http://www.domena.pl a oto kod:

ErrorDocument 404 http://www.domena.pl

2. Podam przykład user.domena.pl przekierowuje na user.domena.pl/user ale w pasku nadal jest widoczny user.domena.pl więc użytkownik nawet dobrze nie wie gdzie jest. ;p

3. na wzorze wygląda to tak:

RewriteCond %{HTTP_HOST} ^www.([a-z0-9]*).domena.pl$ [NC]
RewriteCond %{REQUEST_URI} !^/users/[a-z0-9]*/www.*$ [NC]
RewriteRule ^([a-zA-Z0-9/.?]*)$ /users/%1/www/$1 [L]

Wpisując:
www.
USER.domena.pl/index.php?www=mega (dane np plik 'index.php?www=mega')
Przenosi nas na:
www.USER.domena.pl/USER/www/index.php?www=mega (kopiowane dane w tym przypadki 'index.php?www=mega')
A w przeglądarce nadal widzimy:
www.USER.domena.pl/index.php?www=mega

Opisując powywszy przypadek po wpisaniu www.USER.domena.pl/index.php?www=mega znajdujemy się na stronie www.USER.domena.pl/ w katalogu USER/www/ z wybranym plikiem index.php i danymi get $GET['www']=mega.

4. To już jest trochę inny przypadek można zastosować taki skrypt:

RewriteRule ^([a-zA-Z0-9/]*)$ /www/$1.php [L]

Po wpisaniu www.domena.pl/kontakt trafimy na www.domena.pl/kontakt.php a w przeglądarce zostanie www.domena.pl/kontakt.

Napisałem Ci wszystko o co się pytałeś, aby moja praca nie poszła na marne i byś wyniósł coś z tej lekcji zostawiam Ci posklejanie kodu w jedną całość. Jeśli Ci coś nie będzie działać pisz ale całości nie dostaniesz... winksmiley.jpg

Ps Wiem jaki będzie tytuł mojego pierwszego artykułu na php.pl... winksmiley.jpg

Edit:
- Poprawiłem pkt 1
- Sporo literówek
mal2065
Dzięki. Strasznie to zakręcone, ale będę się wczytywał mocno biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.