Jak si řešíte na localhostu více projektů (přepínání mezi nimi?)
- Jakub Bouček
- Člen | 54
Když vyvíjíte, jak rozlišujete jednotlivé projekty na localhostu.
V poslední době jsem se setkal s tím, že hodně programátorů používá
http://localhost/nazev_projektu/ , ale to mi přijde hodně
nepraktické.
Přinejmenším už proto, že na svých projektech ze statického CSS volám
soubory /img/obrazek.jpg a takhle bych musel navíc CSS (před)generovat
v cestami /nazev_projektu/img/obrazek.jpg (volat jej ../../img/obrazek.jpg
nepřípadá v úvahu).
Já mám svůj systém už vyřešený, ale zarazilo mě, co jsem v posledních dnech viděl a tak se na to teď ptám, protože výše uvedený příklad požívá zjevně více lidí, než jsem očekával.
- Filip Procházka
- Moderator | 4668
apache má krásnou vychytávku, která se jmenuje virtualHost… já používám vzorovej configurák:
<VirtualHost 127.0.0.1:*>
ServerName kdyby.loc
ServerAlias *.kdyby.loc
ServerAdmin HosipLan@gmail.com
DocumentRoot /var/www/xampp/kdyby.org
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/xampp/kdyby.org>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
kterej duplikuju a upravuju v složce sites-available a házím symlinky do
sites-enabled, nevím jak přesně to je na win, ale počítám že nějak
hodně podobně.
Všechno samozřejmě musíš nějakým způsobem tahat do httpd.conf ale
počítám že už to v tom configu bude přednastavené :)
Další krok je nastavit domény na úrovni systému, myslím že jsem slyšel o nějakém programu na win, něco jako lokální-dns-server, na linuxu si tu v pohodě přiřadím k doménám ip 127.0.0.1, určitě rychle příjdeš nato jak to nastavit u sebe.
Editoval HosipLan (15. 10. 2009 21:56)
- Ondřej Brejla
- Člen | 746
VirtualHosty
EDIT: hm…pomale HTC :-) btw na win taky existuje v systemu hosts file (z hlavy nevim kde a nemam se kde podivat :/ ), kde si ty adresy nastavis v textaku a neni potreba zadny externi program.
Editoval Warden (15. 10. 2009 22:05)
- Matúš Matula
- Člen | 257
Na win mi to ide takto:
v subore c:\WINDOWS\system32\drivers\etc\hosts si nadefinujes subdomenu na localhost
napr test:
127.0.0.1 localhost
127.0.0.2 test.localhost
a v apache si nakonfigurujes spracovanie tej adresy (tiche presmerovanie do adresara x)
do suboru httpd.conf [u mna tu: c:\wamp\Apache2\conf\] mozes dat v podstate to, co napisal HosipLan, ale vystacis si s tymto:
<VirtualHost test.localhost:80>
DocumentRoot "C:/web/test"
ServerName test.localhost
</VirtualHost>
Editoval Matúš Matula (15. 10. 2009 22:24)
- Ondřej Mirtes
- Člen | 1536
Přesně tak, VirtualHosts. I když vlastně není adresa bez podsložky potřeba, je to takové příjemnější (používám adresu ve tvaru http://projekt.local/).
K cestám obrázků a CSS souborů: adresa začínající /
je
absolutní, adresa bez /
je relativní. A musíš to správně
nalinkovat jen v HTML, pak v CSSku už stačí mít cesty k obrázkům
relativně od daného CSS souboru, tam už adresu, kde projekt běží, řešit
vůbec nemusíš.
(V době krásných URL je potřeba používat jen ty absolutní cesty, to je snad jasné :))
A k uvedení správné cesty pro CSS a obrázky v HTML slouží v Nette
proměnná {$baseUri}
(a pár revizí nazpět byla přidána i
{$basePath}
, která nemá tuším konečné lomítko), takže sám
nic generovat nemusíš. Pokud je projekt v rootu, bude ta proměnná obsahovat
/
, pokud je v nějaké podsložce, obsahuje
/podslozka/
. Zápis v HTML pak vypadá takto:
<img src="{$baseUri}images/image.jpg" .... />
- Jod
- Člen | 701
Virtual hosty (http://projekt/) + systém adresárov. Nechce sa mi na všetko robiť virtualhosty.
- Cifro
- Člen | 245
Ja na windowsackom localhoste si simulujem prostredie ake ja na hostingu, t.j. adresarovu strukturu.
domena.com/
|-- sub/
| |-- test/
| | |-- index.php
| |-- develop/
|-- web/
| |-- index.php
|-- data/
|-- logs/
|-- atd...
V hosts
subore mam:
#namiesto .com, .sk pouzivam .local
127.0.0.1 domena.local
127.0.0.1 test.domena.local
127.0.0.1 develop.domena.local
vhost.conf
:
<VirtualHost 127.0.0.1>
DocumentRoot "...../www/domena.com/web"
ServerName domena.local
</VirtualHost>
<VirtualHost 127.0.0.1>
DocumentRoot "...../www/domena.com/sub/test"
ServerName test.domena.local
</VirtualHost>
Kedysi som sa pokusal rozchodit aj nejaky simple dns server na localhoste aby
som si mohol zadat napr. *.domena.local a ne vsetky subdomeny vypisovat rucne do
hosts
, ale nepodarilo sa mi to.
- Honza Kuchař
- Člen | 1662
Hmm, já mám adresu trochu delší :) Mám tam celý SVN :)
http://localhost/00_Vyvoj/Projekty/source/PHP/document_root/
- Jakub Bouček
- Člen | 54
Díky za odpovědi.
V podstatě požívám způsoby, které jste uvedli, tedy http://nazevprojektu.localhost/ a to pomocí VirtualHostu a hosts souboru.
Klokan napsal:
Já používám systém adresářů jak bylo psáno v prvním příspěvku, tj. localhost/projekt. V kombinaci s {baseUrl} není potřeba nic řešit, vše mi funguje bez problémů.
A jak řešíš volání statických souborů jako CSS? Nebo to všechno generuješ? A nebo nijak neroutuješ do CoolUri.
honzakuchar napsal:
Hmm, já mám adresu trochu delší :) Mám tam celý SVN :)
http://localhost/…cument_root/
Wow, to vypadá šíleně. Neumím si představi tímto způsobem řešit dva a více projektů. No, jak potom řešíš větvení v SVN, teda pokud ho využíváš?
Snad ještě dodám, že v konfiguraci hostů v Apache jsou jednotlivé
projekty v samostatných souborech, které jsou do hlavního configuračního
souboru includovány něčím jako Include conf/hosts/*.conf
. Abych
si ušetřil práci, na http://localhost/ script rozparsuje configuráky a vytahá
z nich seznam všech hostů na serveru.
Editoval bukaJ (17. 10. 2009 20:47)
- Nich
- Člen | 49
Tak jsem se snažil taky vytvořit svůj server, ale nějak se mi to nedaří…
Mám tuhle strukturu:
C:\Framework\localhost\
-----------------------> \www\first\index.html
-----------------------> \prog\Apache2
První co jsem udělal je, že jsem nainstaloval Apache do složky
Apache2.
Potom jsem v souboru „C:\Windows\System32\drivers\etc\hosts\host“
odkomentoval ten localhost řáděk… takže tam mám:
# localhost name resolution is handled within DNS itself.
127.0.0.1 localhost
A pak jsem v souboru „C:\Framework\localhost\prog\Apache2\conf\httpd.txt“ dopsal tuhle část:
<VirtualHost localhost:80>
DocumentRoot "C:/Framework/localhost/www/"
ServerName localhost
</VirtualHost>
No, ale když do prohlížeče napíšu: „http://localhost/first/index.html“ , tak na mě křičí
Not Found
The requested URL /first/index.html was not found on this server.
Vůbec nevím co jsem udělal špatně :-\
- Nich
- Člen | 49
vrtak-cz napsal(a):
koukni do logu
Tak sem si s tím ještě trošku pohrál, ale marně… a hlásí mi to:
Forbidden
You don't have permission to access /first/index.html on this server.
A v logu mám tohle:
[Thu Jun 17 04:27:35 2010] [error] [client 127.0.0.1] client denied by server configuration: C:/Framework/localhost/www/first/index.html
Přidal jsem do „hhtpd“ i tohle nastavení, ale taky nepomohlo:
<Directory "C:/Framework/localhost/www/">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
</Directory>
- Panda
- Člen | 569
Nich napsal(a):
Přidal jsem do „hhtpd“ i tohle nastavení, ale taky nepomohlo:
<Directory "C:/Framework/localhost/www/"> Options FollowSymLinks AllowOverride All Order deny,allow Deny from all </Directory>
To Deny from all
tam přímo bije do očí. :-)
<Directory "C:/Framework/localhost/www/">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
- repli2dev
- Člen | 57
Pokud vadí potřeba definovat každý VirtualHost zvlášt, lze to eliminovat za použitím 1. Virtualhostu, subdomén a vmod_alias modulu:
<VirtualHost *:80>
ServerName localhost
ServerAlias *.localhost
DocumentRoot /cesta/k/rootu/%1
# Rewrite rule due the problem with missing www
RewriteEngine on
# domain.tld -> www.domain.tld
RewriteCond %{HTTP_HOST} ^([^.]+)\.([^.]+)$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}$1 [L,R=301,QSA]
# www.neco.domain.tld -> neco.domain.tld
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteRule ^(.*)$ http://%1.%2.%3$1 [L,R=301,QSA]
</VirtualHost>
To %1 zařídí, že:
www.localhost se bude hledat v
/cesta/k/rootu/www
neco.localhost se bude hledat v /cesta/k/rootu/neco
V souboru hosts tedy musí být pro každou adresu z nich zápis, v DNS stačí v CNAME *.
- Nich
- Člen | 49
Panda napsal(a):
Nich napsal(a):
Přidal jsem do „hhtpd“ i tohle nastavení, ale taky nepomohlo:
<Directory "C:/Framework/localhost/www/"> Options FollowSymLinks AllowOverride All Order deny,allow Deny from all </Directory>
To
Deny from all
tam přímo bije do očí. :-)<Directory "C:/Framework/localhost/www/"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
No tak sem to upravil ale pořád jsem Forbidden :-(
repli2dev: to s tím DNS nějak nechápu :D
EDIT: v logu mám jinak pořád to samé
[Thu Jun 17 10:43:08 2010] [error] [client 127.0.0.1] client denied by server configuration: C:/Framework/localhost/www/first/index.html
Tady je kdyžtak k nadlédnutí celej ten můj Apache httpd.cof
Editoval Nich (17. 6. 2010 10:53)
- newPOPE
- Člen | 648
Ja vytvaranie virtualhostov nemam rad takze to pouzivam len ked musim
(v praci :-D), inak si myslim ze s tym nejaky problem nie je kedze NETTE
automaticky detekuje hlbku… staci pouzivat {$basePath}
, este mam
ine riesenie a to nastavit v .htaccess
RewriteRule /school/timak
;-)