subdomeny, jak spravne routovat
- LovecAnimuk
- Člen | 9
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
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
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
./app
./bootstrap.php
./libs
./media
./css
./js
...
./subdomena1
./index.php
./subdomena2
./index.php
./www
./index.php
- LovecAnimuk
- Člen | 9
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)
- jtousek
- Člen | 951
@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
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
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
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
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
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
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
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:
- 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.
- Je třeba celou aplikaci sočasně zkopírovat na testovací server (a doménu), otestovat nové funkce.
- 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í).
- 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.
- 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
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
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
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á…