subdomeny, jak spravne routovat

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
LovecAnimuk
Člen | 9
+
0
-

Zdravim, resim nasledujici problem.
Subdomeny jsou na hostingu reseny pomoci slozek, tzn. hlavni index domeny je pod slozkou www, pokud chci vytvorit subdomenu neco, aby pak adresa mela tvar neco.domena.cz tak vedle slozky www, kde chci mit nette aplikaci tak bude na stejne urovni i slozka „neco“
jak pak ale resit aplikaci, kdy se podle subdomeny bude menit css a skupina dat. lze tohle vsechno resit pomoci nette, potazmo asi routovani?

priklad napr eshop:
uzivatel zada adresu auta.neco.cz najede mu napr. modry vzhled v adrese bude porad auta.neco.cz/xyz a podmnozina dat se bude zaobirat pouze autama, naopak pokud uzivatel zada domy.domena.cz najede mu jiny vzhled, jine zbozi, ale fyzicky data budou ve stejnych tabulkach. Co se tyka ovladani, tak bude vsude stejne, pouze se zmeni nektere formulare, dle subdomeny.

na zakladni domene bude nejspise jen rozcestnik na ostatni subdomeny

snazil jsem se pomoci vyhledavani najit podobne tema, ale nepodarilo se mi najit uplne to same reseni, diky moc za odpoved, pripadne nasmerovani na jiz vyresene tema

Editoval LovecAnimuk (11. 1. 2011 10:14)

Aurielle
Člen | 1281
+
0
-

Jedna věc jsou správně napsané routy, druhá věc je přístupnost subdomén. Pokud nemáš každou subdoménu automaticky přístupnou (přesměrovanou třeba na www), tak si budeš muset subdomény ručně vytvořit a do každé dát vlastní index.php. K tomuto účelu se také hodí dát si skripty a obrázky na vlastní subdoménu (třeba media), abys nemusel všechno duplikovat, a přepsat si k tomu $baseUri/$basePath…

LovecAnimuk
Člen | 9
+
0
-

no pokud vytvorim tuto slozku na ftp, tak se automaticky pri zadani adresy ocekava index v teto slozce.

Samozrejme vytvoreni tech subdomen budu delat rucne, bude jich max 5.

Takze jedina moznost nechat samotnou aplikaci pod hlavni domenou/slozkou a z ostatnich subdomen/slozek presmerovat na jejich indexech do hlavni aplikace?

Filip Procházka
Moderator | 4668
+
0
-
./app
	./bootstrap.php
./libs
./media
	./css
	./js
	...
./subdomena1
	./index.php
./subdomena2
	./index.php
./www
	./index.php
LovecAnimuk
Člen | 9
+
0
-

Problem je, ze samotna aplikace musi byt az pod www slozkou, coz je koren. adresar pro hlavni web

./subdomena1
	./index.php
./subdomena2
	./index.php
./www
	./index.php

	./app
		./bootstrap.php
	./libs
	./media
	./css
	./js
	...

Takze nechat to takto s tim, ze pod subdomenama mit indexy odkazane na aplikaci-bootstrap pod slozkou www?
Pujde pak udrzet tvar adres na subdomenovych webech ve tvaru subdomena1.domena.cz/xyz ?

Editoval LovecAnimuk (11. 1. 2011 16:00)

Ondřej Brejla
Člen | 746
+
0
-

Proč by si nemohl použít HosipLanovu strukturu?

jtousek
Člen | 951
+
0
-

@Ondřej Brejla: Protože to hositng nepodporuje (tedy to je alespoň můj předpoklad, také jsem se s tím setkal).

Když už se tady mluví o subdoménách, nedávno jsem nsrazil na ještě jeden problém. Představte si aplikaci, která sice používá několik subdomén, ale tyto subdomény sdílí některá data (typicky texty a obrázky). U textů je to díky databázi snadné. Ale jak vyřešíte sdílení obrázků? Když budou obrázky prostě napevno na jedné z těch subdomén, znamená to v šabloně zbytečný výpis této domény z nějaké config proměnné. Ale ok, to by ještě šlo.

A teď level 2. Co když jde o obrázky vkládané přes WYSIWYG editor typu TinyMCE nebo CKEditor? Jde o to, že když tam tuto doménu uložíte „napevno“ tak nebude možné ji nějak snadno změnit. A parsovat ten text při každém výpisu a nastavovat ty cesty taky není úplně dobré.

Napadá vás řešení?

Filip Procházka
Moderator | 4668
+
0
-

Hlouposti!

ftp_root/
	app/
		bootstrap.php
	libs/
		...
	www/
		index.php
		cost APP_DIR = WWW_DIR . '/../app';
		cost LIBS_DIR = WWW_DIR . '/../libs';
	www2/
		index.php
		cost APP_DIR = WWW_DIR . '/../app';
		cost LIBS_DIR = WWW_DIR . '/../libs';

Tohle prostě musí fungovat, jediný případ, kdy by to nemohlo fungovat by bylo, kdyby jsi měl safe_mode=On a z takového hostingu vzít nohy na ramena!

Co se týče sdílení obrázků, můžeš si nadefinovat, jak tady někdo radil, subdoménu media, shared, nebo něco ještě jednodužšího, třeba http://s.example.com

a pak si nadefinovat proměnné prostředí a předávat je do šablony

bootstrap.php

$host = Nette\Environment::getHttpRequest()->uri->host;
$domainMap = Nette\String::match($host, '~^(?:(?P<second>[^.]+)+\.)?(?P<domain>(?P<top>[^.]+)\.(?P<tld>[^.]+))$~i');

Nette\Environment::setVariable('sharedBaseUri', "http://s.".$domainMap->domain;

BasePresenter.php

protected function createTemplate()
{
	$template = parent::createTemplate();
	$template->sharedBaseUri = Nette\Environment::getVariable('sharedBaseUri');
	return $template;
}
...
<head>
	<!-- sdílené scripty -->
	<script src="{$sharedBaseUri}/js/jQuery.js" type="text/javascript" />
	...

	<!-- specifické pro doménu -->
	<script src="{$baseUri}/js/script.js" type="text/javascript" />
	...
</head>
...

Editoval HosipLan (12. 1. 2011 12:12)

Ondřej Brejla
Člen | 746
+
0
-

HosipLan napsal(a):

Hlouposti!

Přesně tak…a pokud nechci aby se mi z app vytvořila automaticky subdoména, použiji v ní nějaký zakázaný znak, typicky _app.

Filip Procházka
Moderator | 4668
+
0
-

Ondřej Brejla napsal(a):

… pokud nechci aby se mi z app vytvořila automaticky subdoména …

klidně ať se vytvoří když je v ní .htaccess :)

jtousek
Člen | 951
+
0
-

HosipLan:

Tohle prostě musí fungovat, jediný případ, kdy by to nemohlo fungovat by bylo, kdyby jsi měl safe_mode=On a z takového hostingu vzít nohy na ramena!

Jen pokud máš práva na vytváření složek v ftp_root/. Ano, i tak pitomý hosting existuje.

Co se týče sdílení obrázků, můžeš si nadefinovat, jak tady někdo radil, subdoménu media, shared, nebo něco ještě jednodužšího, třeba http://s.example.com a pak si nadefinovat proměnné prostředí a předávat je do šablony

To neřeší problém s WYSIWYG. Tam by ta doména musela být napevno, jenže když pak potřebuješ přesunout web na testovací doménu tak to přestane fungovat.

LovecAnimuk
Člen | 9
+
0
-

HosipLan:
Super, konecne jsem te pochopil jak jsi to myslel, nenapadlo me, ze mi vlastne nevadi, pokud ty subdomeny vytvori. Hned jak prijdu z roboty domu, tak to musim vyzkouset :)
jeste jednou diky za help ;)

Editoval LovecAnimuk (12. 1. 2011 12:28)

Filip Procházka
Moderator | 4668
+
0
-

jtousek napsal(a):

Jen pokud máš práva na vytváření složek v ftp_root/. Ano, i tak pitomý hosting existuje.

upřímnou soustrast… uteč? a neříkej, že to nejde ;)

Wedos – hosting zadarmo? http://hosting.wedos.com/…kurence.html (ne nedělám tam :D)

jtousek napsal(a):

To neřeší problém s WYSIWYG. Tam by ta doména musela být napevno, jenže když pak potřebuješ přesunout web na testovací doménu tak to přestane fungovat.

nic nemusí být napevno… teď jsem se podíval například na tinymce, jdou tam nastavit cesty odkud má načítat a někde ho inicializovat musíš, když ho zinicializuješ v @layout.latte a použiješ tam tu proměnnou {$sharedBaseUri} tak si ji pak jenom změníš v boostrapu, nebo někde kde to budeš mít a máš vystaráno.

Taky si můžeš vytvořit pravidlo, že na localhostu ti to vytvoří url bez http://... ale třeba jen WWW_ROOT . '/shared'

Doména se ti dosadí automaticky, copak jsem nepřiložil i script na detekci domény?

A když už jsme u toho, copak je to problém nastavit su na localhostu doménu mujprojekt.loc a používat stejné url jako na produkčním? s.mujprojekt.cz vs s.mujprojekt.loc ;)

Editoval HosipLan (12. 1. 2011 13:00)

jtousek
Člen | 951
+
0
-

HosipLan: Jen klid, to byly zkušenosti z historie anebo servery klientů. ;) Sám mám VPS takže tohle vážně neřešim.

Pokud jde o ten wysiwyg, myslím, že jsi úplně nepochopil problém:

  1. Uživatel vloží obrázek, TinyMCE (nebo jiný editor) je nakonfigurovaný tak, aby použil něco jako http://shared.domain.tld/obrazky/… – uloží, obrázek funguje, vše je OK.
  2. Je třeba celou aplikaci sočasně zkopírovat na testovací server (a doménu), otestovat nové funkce.
  3. Nastává první problém. Veškeré texty z TinyMCE jsou v db uložené s původní doménou shared.domain.tld a na testovací doméně samozřejmě nefungují (respektive se odkazuje na původní doménu, nikoli na testovací).
  4. Aplikaci s novými funkcemi je třeba naplnit novými daty (stále na testovací doméně) a až to bude hotové tak celé přesunout zase na původní doménu.
  5. Po přesunu přirozeně zjistíme, že původní data opět fungují, ale nová data ne (obrázky se tahají z testovací domény), protože TinyMCE bylo nakonfigurováno pro testovací doménu.

Důležité je uvědomit si, že jakákoli konfigurace wysiwygu se aplikuje když data ukládáš, ne když je vypisuješ.

A když už jsme u toho, copak je to problém nastavit su na localhostu doménu mujprojekt.loc a používat stejné url jako na produkčním? s.mujprojekt.cz vs s.mujprojekt.loc ;)

Samozřejmě, že ne. Taky to tak používám. Jenže to neřeší problém. :D

Editoval jtousek (12. 1. 2011 22:59)

Filip Procházka
Moderator | 4668
+
0
-

jo takhle… :D

to jde ochcat, v nejhorším nějakým překladovým hackem

$sbi = Nette\Environment::getVariable('sharedBaseUri');
$clanek->text = Nette\String::replace($fromWYSIWYG, array('~'.preg_quote($sbi).'~' => '{$sharedBaseUri}'));
$clanky->save($clanek);
public function renderDefault($id)
{
	$clanky = new ClankyModel;
	$cache = $clanky->getCache(); // return Nette\Environment::getCache('Aplikace.Clanky');

	if (!isset($cache[$id])) {

		$clanek = $clanky->find($id);

		$template = new StringTemplate;
		$template->sharedBaseUri = Nette\Environment::getVariable('sharedBaseUri');
		$template->content = $clanek->text;

		ob_start();
			$template->render()
		$clanek->text = ob_get_clean();

		$cache->save($id, $clanek, array(
			'tags' => array('clanky', 'clanek#'.$id)
		));
	}

	$this->template->clanek = $cache[$id];
}

Editoval HosipLan (13. 1. 2011 0:07)

jtousek
Člen | 951
+
0
-

Fuj! :D To se mi vůbec ale vůbec nelíbí… ;)

Napadlo mě něco lepšího. Co takhle, že by se všude místo http://shared.domain.tld/… používalo jen /shared/…? Přičemž ve složce shared (na každé subdoméně) by byl .htaccess kterej by to přesměroval na http://shared.domain.tld/

To by mohlo fungovat ne? Jakej na to máš názor? Nebude to moc pomalé? Taky to trochu zvýší zátěž serveru, bude muset vždy poprvé poslat přesměrování a teprve podruhé opravdu odpovědět.

Nedá se do .htaccess respektive mod_rewrite dostat nějaká vlastní proměnná kde bych měl tu doménu druhého řádu abych ten htaccess nemusel pokaždý psát (rozuměj generovat) znovu?

Patrik Votoček
Člen | 2221
+
0
-

jtousek napsal(a):

HosipLan:

Tohle prostě musí fungovat, jediný případ, kdy by to nemohlo fungovat by bylo, kdyby jsi měl safe_mode=On a z takového hostingu vzít nohy na ramena!

Jen pokud máš práva na vytváření složek v ftp_root/. Ano, i tak pitomý hosting existuje.

pořád máš možnost vytvořit subdoménu app, log, temp… která díky .htaccess / web.config nebude dostupná…