Autor Zpráva
lopikol
Profil
Snažím se na linux debian zprovoznit vhost.

Do defaul (hlavní nastavení) sem si přidal:
UseCanonicalName Off
VirtualDocumentRoot /var/www/%2+/%1

Include /etc/apache2/sites-enable/*.conf


A směřuju všechny adresy, které končí na .l (petr.l, honza.l ...)na server.

Pokud zadám adresu: blog.honza.l

tak se pomocí Include /etc/apache2/sites-enable/*.conf načte soubor Include /etc/apache2/sites-enable/honza.conf v kterém je:

<VirtualHost *:80>         
   DocumentRoot "/var/www/honza"  
   ServerName honza.l            
   ErrorLog "${APACHE_LOG_DIR}/error/honza-error.log"
   TransferLog "${APACHE_LOG_DIR}/access/honza-access.log"  
</VirtualHost>   

<Directory "/var/www/honza/*">
   php_admin_value open_basedir /var/www/honza:/tmp
</Directory>


a zobrazí se v prohlížeči data ze složky /var/www/honza/blog/.

Problém však nastane, když se zadá adresa honza.l
na to se nemůžu uplatnit pravidlo:
VirtualDocumentRoot /var/www/%2+/%1
a tim pádem to je celé nefunkční.

Můj dotaz zní, jak udělat, aby každá složky ve složce /var/www/honza byla subdomena, tedy.
/var/www/honza/blog => blog.honza.l
/var/www/honza/foto => foto.honza.l
/var/www/honza/data => data.honza.l


a pokud uživatel přijde pouze přes honza.l, tak se zobrazí data ze složky /var/www/honza

Moderátor Davex: Titulek „Nastavení virtualhostu. - pomoc“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
Davex
Profil
Kombinuješ dohromady dva různé způsoby vytváření virtuálních hostitelů.

1) <VirtualHost>
2) VirtualDocumentRoot

Ten druhý byl zamýšlen jako náhrada prvního, aby se konfigurace zjednodušila, ale vzhledem k různým omezením se obvykle používá jen ve speciálních případech (velké množství názvů v jednotné konfiguraci).

Pokud zadám adresu: blog.honza.l
>
tak se pomocí Include /etc/apache2/sites-enable/*.conf načte soubor Include /etc/apache2/sites-enable/honza.conf
--
když se zadá adresa honza.l
na to se nemůžu uplatnit pravidlo:
>
VirtualDocumentRoot
Mělo by to fungovat přesně naopak. Na blog.honza.l zabere VirtualDocumentRoot a na honza.l se použije konfigurace z <VirtualHost>. Nikdy jsem to nekombinoval.

lopikol:
Můj dotaz zní, jak udělat, aby každá složky ve složce /var/www/honza byla subdomena, tedy.
Použil bych pouze <VirtualHost> se ServerAlias *.honza.l a subdomény rozhazoval do adresářů pomocí pravidla mod_rewrite uvnitř sekce <VirtualHost> (viz Htaccess a různé domény).
lopikol
Profil
Díky, ale tam je problém v tom, že složky by musely být ve tvaru a.honza.l a ne honza.l/a
Zkusil jsem to upravit na RewriteRule .* /%2/%1/$0 [L] jenže to to pak hledá ve složce s tečkou > honza.l/a.
Davex
Profil
Tvůj postup byl správný, jen se v regulárním výrazu musí přesunout tečka mimo předávaný podvýraz.

RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{HTTP_HOST} ^(?:www\.)?(?:([^.]+)\.)?([^.]+\.[^.]+)$ [NC]
RewriteRule .* /%2/%1/$0 [L]

Nezkoušel jsem to, snad to bude funkční i pro jméno honza.l.
lopikol
Profil
Díky funguje to ;)
lopikol
Profil
Neměl by si nějaký nápad jak na tento problém, jelikož jak jsi psal zde v tomto příspěvku, tak mi to dělá problém u nette framework.

Zde je můj .htaccess.
Davex
Profil
Nevím, jaké jsou konkrétní projevy tvého problému, ale můžeš to vyzkoušet z odkomentovaným RewriteBase /.
lopikol
Profil
Odkomentováno a nic se nezmění :(
Chyba se projeví tak, že když je url ve tvaru honza.l/php/, tak se ani nezobrazí obsah honza.l(192.168.1.1/honza.l), ale zobrazí se obsah serveru, tedy (192.168.1.1)

192.168.1.1 = 127.0.0.1
Davex
Profil
V nastavení <VirtualHost>a zkus upravit poslední řádek podle [#4] na:

RewriteRule ^(.*)$ /%2/%1/$1 [L]
lopikol
Profil
Davex:
Stejnej výsledek :(
Davex
Profil
Možná je drobná chyba, že už je VirtualHost umístěn do adresáře, takže se musí ubrat první adresář v pravidle pro subdomény, ale to by ti předtím nefungovalo ([#5]). V této podobě konfigurace <VirtualHost>u jsou pravidla v souboru /var/www/honza/php/.htaccess funkční:

<VirtualHost *:80>         
   DocumentRoot "/var/www/honza"  
   ServerName honza.l
   ServerAlias *.honza.l       
   ErrorLog "${APACHE_LOG_DIR}/error/honza-error.log"
   TransferLog "${APACHE_LOG_DIR}/access/honza-access.log"  
</VirtualHost>   

<Directory "/var/www/honza/">

  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} =""
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(?:([^.]+)\.)?([^.]+\.[^.]+)$ [NC]
  RewriteRule ^(.*)$ /%1/$1 [L]

   php_admin_value open_basedir /var/www/honza:/tmp
</Directory>
lopikol
Profil
při tomto mi nefungují subdomény :(
->zobrazí se obsah honza.l
Davex
Profil
Pokud máš Nette a soubor .htaccess v adresáři /var/www/honza/honza.l/php/, tak tam musí zůstat /%2.

RewriteRule ^(.*)$ /%2/%1/$1 [L]

Nevím, v jakých adresářích soubory přesně jsou a jaká je adresářová struktura. Musíš si to upravit podle sebe.
lopikol
Profil
Nette je v /var/www/honza.l/

Při tomto mi jdou hezké url, ale né subdomény

<VirtualHost *:80>
  DocumentRoot /var/www/honza.l/
  ServerName honza.l
  ServerAlias *.honza.l
  ErrorLog ${APACHE_LOG_DIR}/error/honza.l-error.log
  TransferLog ${APACHE_LOG_DIR}/access/honza.l-access.log
</VirtualHost>    

<Directory "/var/www/honza.l/">
  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} =""
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(?:([^.]+)\.)?([^.]+\.[^.]+)$ [NC]
  RewriteRule ^(.*)$ /%1/$1 [L]

  php_admin_value open_basedir /var/www/honza.l:/tmp
</Directory>


Jdou mi subdomény, ale né hezké url

<VirtualHost *:80>
  DocumentRoot /var/www/
  ServerName honza.l
  ServerAlias *.honza.l
  ErrorLog ${APACHE_LOG_DIR}/error/honza.l-error.log
  TransferLog ${APACHE_LOG_DIR}/access/honza.l-access.log

  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} =""
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(?:([^.]+)\.)?([^.]+\.[^.]+)$ [NC]
  RewriteRule .* /%2/%1/$0 [L]
</VirtualHost>  
Davex
Profil
lopikol:
Aha, celou dobu na to koukám a nevidím. Sekce <Directory> musí být v <VirtualHost> a nikoliv za ní. Přepisovací pravidla musí být v sekci <Directory>.

<VirtualHost *:80>
   DocumentRoot /var/www/
   ServerName honza.l
   ServerAlias *.honza.l
   ErrorLog "${APACHE_LOG_DIR}/error/honza.l-error.log"
   TransferLog "${APACHE_LOG_DIR}/access/honza.l-access.log"

  <Directory "/var/www/">
    RewriteEngine On
    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(?:([^.]+)\.)?([^.]+\.[^.]+)$ [NC]
    RewriteRule ^(.*)$ /%2/%1/$1 [L]

    php_admin_value open_basedir /var/www/honza.l:/tmp
  </Directory>

</VirtualHost>
lopikol
Profil
Přit tomto fungují subdomény. Na adrese honza.l se zobrazí obsah jak má, ale pokud je adresa honza.l/about (hezké url), tak je bílá stránka
<VirtualHost *:80>
  DocumentRoot /var/www/
  ServerName honza.l
  ServerAlias *.honza.l
  ErrorLog ${APACHE_LOG_DIR}/error/honza.l-error.log
  TransferLog ${APACHE_LOG_DIR}/access/honza.l-access.log   

 <Directory "/var/www/">
  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} =""
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(?:([^.]+)\.)?([^.]+\.[^.]+)$ [NC]
  RewriteRule ^(.*)$ /%2/%1/$1 [L]

  php_admin_value open_basedir /var/www/honza.l:/tmp
 </Directory>
</VirtualHost> 


Upravil jsem to tedy na tento tvar, ale tady jdou hezké url, ale ne subdomény

<VirtualHost *:80>
  DocumentRoot /var/www/honza.l/
  ServerName honza.l
  ServerAlias *.honza.l
  ErrorLog ${APACHE_LOG_DIR}/error/honza.l-error.log
  TransferLog ${APACHE_LOG_DIR}/access/honza.l-access.log   

 <Directory "/var/www/honza.l/">
  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} =""
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(?:([^.]+)\.)?([^.]+\.[^.]+)$ [NC]
  RewriteRule ^(.*)$ /%1/$1 [L]

  php_admin_value open_basedir /var/www/honza.l:/tmp
 </Directory>
</VirtualHost> 


Já už tedy fakt nevim co to blbne :(
Davex
Profil
S prvním nastavením mi funguje i přepis Cool URI a s druhým fungují i subdomény, takže se nemám čeho chytit. Je nějaká chyba v logu honza.l-error.log?

Také vyzkoušej, zda funguje přepis na jednoduchý /var/www/honza.l/index.php bez použití Nette (soubor .htaccess tam nech):

<?php

var_dump($_SERVER);
lopikol
Profil
Používám ten první příklad

var_dump($_SERVER);
array(29) { ["REDIRECT_STATUS"]=> string(3) "200" ["HTTP_HOST"]=> string(12) "honza.l" ["HTTP_USER_AGENT"]=> string(70) "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0" ["HTTP_ACCEPT"]=> string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" ["HTTP_ACCEPT_LANGUAGE"]=> string(23) "cs,en-us;q=0.7,en;q=0.3" ["HTTP_ACCEPT_ENCODING"]=> string(13) "gzip, deflate" ["HTTP_ACCEPT_CHARSET"]=> string(32) "windows-1250,utf-8;q=0.7,*;q=0.7" ["HTTP_CONNECTION"]=> string(10) "keep-alive" ["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0" ["PATH"]=> string(28) "/usr/local/bin:/usr/bin:/bin" ["SERVER_SIGNATURE"]=> string(73) "
Apache/2.2.19 (Debian) Server at honza.l Port 80
" ["SERVER_SOFTWARE"]=> string(22) "Apache/2.2.19 (Debian)" ["SERVER_NAME"]=> string(12) "honza.l" ["SERVER_ADDR"]=> string(11) "192.168.0.1" ["SERVER_PORT"]=> string(2) "80" ["REMOTE_ADDR"]=> string(11) "192.168.0.4" ["DOCUMENT_ROOT"]=> string(8) "/var/www" ["SERVER_ADMIN"]=> string(18) "[no address given]" ["SCRIPT_FILENAME"]=> string(31) "/var/www/honza.l/index.php" ["REMOTE_PORT"]=> string(5) "52219" ["REDIRECT_URL"]=> string(1) "/" ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" ["REQUEST_METHOD"]=> string(3) "GET" ["QUERY_STRING"]=> string(0) "" ["REQUEST_URI"]=> string(1) "/" ["SCRIPT_NAME"]=> string(24) "/honza.l//index.php" ["PHP_SELF"]=> string(24) "/honza.l//index.php" ["REQUEST_TIME"]=> int(1313481939) } 


Při zadání honza.l/about/me/ (cool uri), je v error logu:
[Tue Aug 16 10:10:21 2011] [error] [client 192.168.0.4] PHP Warning:  Unknown: open_basedir restriction in effect. File(/var/www/index.php) is not within the allowed path(s): (/var/www/honza.l:/tmp) in Unknown on line 0, referer: http://honza.l/
[Tue Aug 16 10:10:21 2011] [error] [client 192.168.0.4] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0, referer: http://honza.l/
[Tue Aug 16 10:10:21 2011] [error] [client 192.168.0.4] PHP Fatal error:  Unknown: Failed opening required '/var/www/index.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0, referer: http://honza.l/


Při zadání a.honza.l/, se v error logu nic nezobrazí. Správně se ukáže obsah složky a (/var/www/honza.l/a/)

Davex:
Také vyzkoušej, zda funguje přepis na jednoduchý /var/www/honza.l/index.php bez použití Nette (soubor .htaccess tam nech):
Jak bych to měl vyzkoušet? Pokud tam nechám jen .htaccess a index.php, tak to je jako by tam nebylo nic, jelikož samo o sobě to nic neumí.
Davex
Profil
Když zpátky zakomentuješ # RewriteBase / v .htaccess, tak je to lepší nebo ho už zakomentované máš?
lopikol
Profil
Davex:
To pomůže, už to jede jak má.

Díky moc za trpělivost, opravdu jsi člověk na správném místě. Jentak dál!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0