Ruzne verze jednoho webu – domena, subdomena, narodni domena
- elden46
- Člen | 37
Zdravim,
nasledujici otazka je mozna spise filozoficka nez technicka, budu ale velmi rad,
kdyz me navedete k optimalnimu reseni.
Mam jeden projekt „projekt.cz“, ktery musim rozsirit. Pozadavek na rozsireni je takovy, aby na subdomene „pod.projekt.cz“ vznikla kopie celeho webu s tim, ze se v nekterych marginalnich castech bude lisit (malinko jiny zdroj grafiky, nektere sablony jine, velmi malo funkcnosti v prezenterech jine – uplne stejny model, databaze atp.). Zaroven ma byt projekt portovan na novou domenu „projekt.com“ (a „pod.projekt.com“), ktera bude temer cistou kopii „(pod.)projektu“, jen s lokalozaci (+ lokalizace meny, narodnich nastaveni casu atp.).
Jakym zpusobem nasledujiciho chovani nejlepe dosahnout? Programovat cely projekt jako jeden slozitejsi celek, ktery si nejakym zpusobem pamatuje, ve ktere verzi a lokalozaci projektu prave je a podle toho upravuje sve chovani, nebo vytvorit 4 kopie projektu, kde chovani upravit rucne?
Da se pripade vyvoje v jednom projektu podobneho chovani dosahnout napriklad jen pomoci rout?
Diky predem za pomoc a objasneni problematiky
- esorimer
- Člen | 114
Podle mých zkušeností, tvrzení že se projekt bude lišit jen
v některých marginálních věcech je jen eufemismus pro „chceme to
levně“.
Pokud by šlo opravdu jen o lokalizaci, nechal bych jeden „složitější“
celek, jinak bych vytvořil v SVN (nebo gitu …) pro každou verzi extra
větěv. Společné změny se pak snadno přenesou mezi větvemi a rozdíly
budou v každé větvy zvlášť.
- llook
- Člen | 407
Pokud všechny domény nasměruješ na stejný server do stejné složky, tak můžeš podle domény routovat úplně stejně, jako podle cesty, viz https://doc.nette.org/…tion/routing například:
$route = new Route('//[<lang=en>.]example.com/<presenter>/<action>',
'Homepage:default');
- elden46
- Člen | 37
Trosku jsem postoupil s problemem, ktery jsem postoval v prvnim prispevku. Predem chci upozornit, ze jsou pro me tyto veci hodne nove (napriklad spravna konfigurace .htaccess souboru a vzajemne interakce ruznych .htaccess v ruznych adresarich) a proto se v nich asi dost ztracim a nechapu nejake souvislosti (a proto taky pisu o radu:-))
Mozna dokonce ani pozadovaneho chovani nelze dosahnout, nevim…
Vize) idealni fungovani projektu by bylo takove, abych mel
pouze jeden zdrojovy kod aplikace, na ktery by se pristupovalo pomoci podstrceni
obsahu htaccessem skrz subdomenu (subdomena.projekt.cz) a domenu (www.projekt.cz). V aplikaci
bych si pak pouze zjistil, pristupuje-li zakaznik pres subdomenu (asi
v BasePresenteru odchytavat subdomenu, co dodaji routy) a podle toho upravil
kod.
Pokud clovek pristoupi do aplikace pres subdomenu, tak vsechny linky v aplikaci
budou linkovany na subdomenu (tj. v subdomena.projekt.cz/clanky/list
budou vsechny odkazy opet do subdomeny).
Stara routa:
function importFile($m)
$frontendRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
Nova routa:
function importFile($m)
$frontendRouter[] = new Route('//[<subdomain>.]projekt.cz/<presenter>/<action>[/<id>]', 'Homepage:default');
Dosud vse v poradku, projekt nadale funguje. Jediny rozdil, ktery jsem zaznamenal je ten, ze se odkazy zacaly vypisovat jako http://projekt.cz/clanky/list namisto drivejsiho http://www.projekt.cz/clanky/list
Reseni subdomeny
Cesta k indexu aplikace je projekt_cz/www/www/index.php
Po zadani www.projekt.cz se
uzivatel dostane do projekt_cz/www/, ve kterem je .htaccess, ktery
zarizuje presmerovani na index (o adresar dale)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^projekt.cz$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.projekt.cz$
RewriteCond %{REQUEST_URI} !www/
RewriteRule (.*) /www/$1 [L]
Subdomena je resena pomoci .htaccessu na urovni root adresare domeny projekt_cz/
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^subdomena.projekt.cz
RewriteCond %{REQUEST_URI} !subdomena/
RewriteRule ^(.*)$ /www/www/$1 [L]
Po spusteni http://subdomena.projekt.cz se spravne
dostanu do aplikace. Router mi ale jiz nevytvari korektni odkazy (nebo spise
nevytvari takove odkazy, jako bych si ja predstavoval), namisto
subdomena.projekt.cz/clanky/list vytvori
projekt.cz/clanky/list (a tim se pak dostanuna puvodni domenu).
Navic po rucnim zadani subdomena.projekt.cz/clanky/list skonci
na chybe
Not Found
The requested URL /www/index.php was not found on this server.
Mozna trochu patlam pate pres devate a micham vice problemu dohromady, presto
budu rad za jakekoliv nakopnuti, ktere by me priblizilo vizi, abych
nakonec nemusel subdomenu resit jako kopii cele aplikace v adresari
subdomeny.
Pokud jste se docetli az sem, tak dekuji za vas cas:-)