Portál AbcLinuxu, 30. dubna 2025 14:09
Tento zápisek je stručný návod na ušetření práce, pokud vyvíjíte více webů v PHP najednou. Cílem je nastavit počítač tak, aby na adresách *.lo servíroval weby, které vyvíjíte.
Co budeme potřebovat?
0. Debian-based distribuci
1. LAMP
sudo apt-get install tasksel
sudo tasksel install lamp-server
2. mod_rewrite
sudo a2enmod rewrite
3. Dnsmasq
sudo apt-get install dnsmasq
4. Konfiguraci
address=/lo/127.0.0.1 listen-address=127.0.0.1
nameserver 127.0.0.1
#!/bin/sh RESOLV=/etc/resolv.conf RESOLV_TMP=/tmp/resolv.conf LOC_NS=127.0.0.1 if ! grep -q $LOC_NS $RESOLV; then echo "# Generated by $0" > $RESOLV_TMP echo "nameserver $LOC_NS" >> $RESOLV_TMP cat $RESOLV >> $RESOLV_TMP mv $RESOLV_TMP $RESOLV fi
<VirtualHost *:80> ServerName lo ServerAlias *.lo DocumentRoot /adresar/kde/mam/weby #do the magic: something.lo => DocumentRoot/something/document_root RewriteEngine On RewriteCond %{HTTP_HOST} ^([^.]*)\.([^.]*)$ RewriteCond %{REQUEST_URI} !document_root RewriteRule ^(.*)$ /%1/document_root$1 # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. ErrorLog /adresar/kde/mam/weby/.log/error.log LogLevel debug CustomLog /adresar/kde/mam/weby/.log/access.log combined ServerSignature On RewriteLog "/adresar/kde/mam/weby/.log/rewrite.log" RewriteLogLevel 5 </VirtualHost>
$_SERVER['DOCUMENT_ROOT']
v PHP
auto_prepend_file =
/adresar/kde/mam/weby/.auto_prepend.php
<?php $domain = explode('.', $_SERVER['SERVER_NAME']); if (count($domain) == 2 && $domain[1] == 'lo') $_SERVER['DOCUMENT_ROOT'] = "/adresar/kde/mam/weby/$domain[0]/document_root";
5. Aplikovat konfiguraci
sudo a2ensite lo
sudo service apache2 restart
sudo service dnsmasq restart
Ready to serve.
Zdroje:
Tiskni
Sdílej:
nemuset tak nastavovat rewrite, php apod?Pro dosažení stejného chování musím PHP nastavovat stejně. Prostě jsem jen přepsal mod_vhost_alias (protože mi dělal nějaké bohužel už zapomenuté problémy) pomocí mod_rewrite, jinak je to stejné.
Pro funkční vhost_alias není třeba nastavovat php. Pro funkční simulaci vhost_alias mod_rewritem (tak jak je popsaná v tomto zápisku) také není třeba nastavovat php. Pokud chceme mít správnou hodnotu proměnné $_SERVER['DOCUMENT_ROOT'], je třeba v obou případech provést konfiguraci php tak, jak je popsáno v tomto zápisku. Proto mi komentář doporučující nahradit celý tento zápisek vhost_aliasem přišel nepřesný.
Vy doporučujete to nekonfigurovat a tu proměnnou nepoužívat jako nespolehlivou. Rozumím, beru, je to taky řešení, ale vidím to jako alternativu, nikoliv jako něco, co vyvrací správnost či spíše účelnost konfigurace zde popsané.
evhost.path-pattern = "/srv/www/%_/" $HTTP["host"] =~ "^www\..*\.loc$" { evhost.path-pattern = "/srv/www/%_/www/" }A pak mám skript, který upraví /etc/hosts:
#!/bin/bash virtuals=$(find /srv/www -maxdepth 1 -mindepth 1 \! -name localhost -printf ' %f') sed 's/^\(127\.0\.0\.1.*[ \t]loc\>\).*/\1 '"$virtuals"'/' -i /etc/hostsKde /etc/hosts obsahuje řádek:
127.0.0.1 localhost loc ...nejaky bordel...No a nakonec ještě položku v menu, která to přes sudo spustí a restartuje lighttpd. Výhodou je, že mi tu nestraší DNS server a je to celé takové jednodušší
Evhost používám taky, je super... akorát mám problém s tím, že když přes nějakej regexp udělám z nějaké domény reverzní proxy, tak mi plní error logy "file not found"...
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.