Apache как Denwer

Статус
В этой теме нельзя размещать новые ответы.

lolshik

Постоялец
Регистрация
21 Фев 2008
Сообщения
316
Реакции
127
Народ, нужна помощь.
Пользовался раньше Денвером, так вот когда создаёшь в www какую то папку (test1.ru), то автоматом можно в адресной строке её набирать и юудет ходить (Для просмотра ссылки Войди или Зарегистрируйся).

Как тоже самое сделать на Apach`е. Чтобы на автомате, сделал новую директорию - он вешает новую строчку в hosts (я так понимаю работает Денвер)
 

это не есть прописывание hosts

это элементарно ватсон - это значит папочку test1.ru ты создал в http_dir сервера.
т.е. для при апаче можешь по умолчанию создавать такие папочки примерно там ... C:/Program Files/Apache .../Apache 2/htdocs/ - вот примерно тут. И они также будут доступны по тому же принципу и файл hosts тут не причем
 
  • Заблокирован
  • #4
в денвере есть отдельный скрипт, сканирующий папку home на передмет подпапок - из их имен (а так же их подпапок), по шаблону, создает хосты в конфигах апача и добавляет их в виндовый host файл..
 
А в Apche так кто-нибудь делал? Может есть готовое решение?
 
файл /etc/scripts/hosts.pl прописывает hosts в винде
Код:
#!perl -w
# +-------------------------------------------------------------------------+
# | ─цхэЄы№ьхэёъшщ эрсюЁ Web-ЁрчЁрсюЄўшър                                   |
# | ┬хЁёш*: ─хэтхЁ-2 2006-04-25                                             |
# +-------------------------------------------------------------------------+
# | Copyright (C) 2001-2004 ─ьшЄЁшщ ╩юЄхЁют.                                |
# +-------------------------------------------------------------------------+
# | ─рээ√щ Їрщы *ты*хЄё* ўрёЄ№■ ъюьяыхъёр яЁюуЁрьь "─хэтхЁ-2". ┬√ эх ьюцхЄх |
# | шёяюы№чютрЄ№  хую т ъюььхЁўхёъшї  Ўхы*ї.  ═шъръшх фЁєушх юуЁрэшўхэш* эх |
# | эръырф√тр■Єё*.  ┼ёыш т√ їюЄшЄх тэхёЄш шчьхэхэш* т шёїюфэ√щ ъюф,  ртЄюЁ√ |
# | сєфєЄ Ёрф√ яюыєўшЄ№ юЄ трё ъюььхэЄрЁшш ш чрьхўрэш*. ╧Ёш*Єэющ ЁрсюЄ√!    |
# +-------------------------------------------------------------------------+
# | ─юьр°э** ёЄЁрэшЎр: http://denwer.ru                                     |
# | ╩юэЄръЄ√: http://forum.dklab.ru/denwer                                  |
# +-------------------------------------------------------------------------+
package Starters::Hosts;
BEGIN { unshift @INC, "../_lib"; }

use Tools;
use Installer;
use ParseHosts;
use VhostTemplate;
use StartManager;
use Starters_Conf;

# Path to hosts file.
my $hostsPath=getHostsPath();

# Read hosts.
my $h=readBinFile($hostsPath);

# First delete hosts which was added before.
# We need it in case of doubled script running.
my %log=readHostsLog();


StartManager::action 
	$ARGV[0],
	PATH => [
	],
	start => sub {
		###
		### START.
		###
		print "Обновляем $hostsPath...\n";
		chmod(0666, $hostsPath);

		# Check if we running under Administrator.
		if(!open(local *F, ">>$hostsPath")) {
			print "\n";
			message qq{
				Внимание! Для работы системы виртуальных хостов вы должны 
				находиться в режиме Администратора. Сейчас у вас нет необходимых
				привилегий, поэтому работать будет только localhost.
			
				Эта ошибка также может возникнуть в случае, если файл
				$hostsPath имеет атрибут "только чтение".
				Вы должны снять этот атрибут для продолжения работы.
			};
			waitEnter();
			return;
		}

		if(scalar(keys %log)) {
			print "  Откат предыдущих изменений... ";
			my %del=deleteHosts($h,%log);
			writeHostsLog(); # чистим журнал
			print "отменено хостов: ".scalar(keys %del)."\n";
		}

		# Add hosts from /home.
		my %dom = VhostTemplate::getAllVHosts_forHosts($Starters_Conf::HTTPD_CONF);
		my %added = insertHosts($h,%dom);
#		warn join(", ", keys %added);

		# Add really added hosts to log.
		writeHostsLog(%added);

		# Save hosts.
		writeBinFile($hostsPath,$h);

		print "  Добавлено хостов: ".scalar(keys %added)."\n";
	},
	stop => sub {
		###
		### STOP.
		###
		print "Восстанавливаем $hostsPath...\n";

		my %del=deleteHosts($h,%log);
		writeHostsLog(); # clear log

		# Save hosts.
		if(eval { writeBinFile($hostsPath,$h); 1 }) {
			print "  Готово. Отключено хостов: ".scalar(keys %del)."\n";
		} else {
			print "  Недостаточно привилегий, пропущено.\n";
		}

	},
;

return 1 if caller;
и файл apache.pl прописывает домены в конфиге апача
Код:
#!perl -w
# +-------------------------------------------------------------------------+
# | Джентльменский набор Web-разработчика                                   |
# | Версия: Денвер-2 2006-04-25                                             |
# +-------------------------------------------------------------------------+
# | Copyright (C) 2001-2004 Дмитрий Котеров.                                |
# +-------------------------------------------------------------------------+
# | Данный файл является частью комплекса программ "Денвер-2". Вы не можете |
# | использовать  его в коммерческих  целях.  Никакие другие ограничения не |
# | накладываются.  Если вы хотите внести изменения в исходный код,  авторы |
# | будут рады получить от вас комментарии и замечания. Приятной работы!    |
# +-------------------------------------------------------------------------+
# | Домашняя страница: http://denwer.ru                                     |
# | Контакты: http://forum.dklab.ru/denwer                                  |
# +-------------------------------------------------------------------------+

package Starters::Apache;
BEGIN { unshift @INC, "../_lib"; }

use Tools;
use Installer;
use ParseHosts;
use VhostTemplate;
use StartManager;

# Seconds to wait apache stop while restart is active.
my $timeout = 10;

# Get common pathes.
my $basedir     = $CNF{apache_dir};
my $exe         = fsgrep { /\Q$CNF{apache_exe}\E/i } $basedir;
die "  Could not find $CNF{apache_exe} inside $basedir\n" if !$exe;
my $httpd_conf  = "$basedir/conf/httpd.conf";
my $vhosts_conf = "$basedir/conf/vhosts.conf";
my $httpd_pid   = "$basedir/logs/httpd.pid";


# Additional PATH entries.
my @addPath = ();

# Autoconfigure PHP - detect basedir from LoadModule in httpd.conf file.
my $phpdir = undef;
my $httpdCont = readBinFile($httpd_conf) or die "  Could not read $httpd_conf\n";
if ($httpdCont =~ /^[ \t]* LoadModule [ \t]+ php\S*_module [ \t]+ (?: "([^"\r\n]*)" | (\S+) )/mix) {
  my $path = dirname($1 || $2);
  if (my $p1 = dirgrep { /^php.ts\.dll$/i } $path) {
    $phpdir = dirname($p1);
  } elsif (my $p2 = dirgrep { /^php.ts\.dll$/i } "$path/..") {
    $phpdir = dirname($p2);
  }
}
if ($phpdir) {
  # PHP configuration file location.
  $ENV{PHPRC} = $phpdir;
  # For OpenSSL module in PHP.
  if (my $p = fsgrep { /^openssl.cnf$/i } $phpdir) {
    $ENV{OPENSSL_CONF} = $p;
  }
  # Set PATH.
  push @addPath, ($phpdir, fsgrep { /^extensions$/i || /^dlls$/i } $phpdir);
}


StartManager::action 
  $ARGV[0],
  PATH => [
  	'\usr\local\ImageMagick',
  	@addPath,
  ],
  start => sub {
    ###
    ### START.
    ###
    processVHosts();
    print "‡*ЇгбЄ*Ґ¬ Apache...\n";
    if(checkApacheIfRunning()) {
      print "  Apache 㦥 §*ЇгйҐ*.\n";
    } else {
      chdir($basedir);
      my $exe = $exe;
      if(!-f $exe) {
        die "  ЌҐ г¤*Ґвбп **©вЁ $exe.\n";
      } else {
        # Clean global error.log to avoid stupid PHP "C:\mysql" binding.
        unlink("$basedir/logs/error.log");
        # Start apache.
        system("start $exe -w");
        print "  ѓ®в®ў®.\n";
      }
    }
  },
  stop => sub {
    ###
    ### STOP.
    ###
    print "‡*ўҐаи*Ґ¬ а*Ў®вг Apache...\n";
    my $exe = $exe;
    if(!-f $exe) {
      print "  ЌҐ г¤*Ґвбп **©вЁ $exe.\n";
    } else {
      my $was = checkApacheIfRunning();
      # ’гЇ®© Apache2 *Ґ 㬥Ґв §*ўҐаи*вмбп Ї® -k shutdown!
      # Џ®н⮬㠯аЁе®¤Ёвбп ЇаЁЎЁў*вм ўагз*го. ѓап§*®, Є®*Ґз*®.
      # Љбв*вЁ, Parent ID г Їа®жҐбб* *Ґ«м§п Ї®«гзЁвм ў Windows NT Workststion.
      my $ps = getPs(1);
      if ($ps) {
        foreach (@$ps) {
          next if $_->{exe} !~ /apache\.exe$/is;
          kill 9, $_->{pid};
        }
      } else {
        print "  ЌҐ г¤*Ґвбп **©вЁ гвЁ«Ёвг ps.exe.\n";
      }
#      system("\"$exe\" -k shutdown");
      if($was) {
        unlink($httpd_pid);     
        print "  ѓ®в®ў®.\n";
      } else {
        print "  Apache *Ґ §*ЇгйҐ*.\n";
      }
    }
  },
  _middle => sub {
    my $tm = time();
    if(checkApacheIfRunning()) {
      print "Ћ¦Ё¤*Ґ¬ §*ўҐаиҐ*Ёп Apache (¬*ЄбЁ¬г¬ $timeout ᥪг*¤) ";
      while(time() - $tm < $timeout) {
        print ". ";
        if(!checkApacheIfRunning()) {
          print "\n";
          return;
        }
        sleep(1);
      }
      print "\n";
      print "  ЌҐ г¤*Ґвбп ¤®¦¤*вмбп §*ўҐаиҐ*Ёп!\n";
    }
  },
;


sub processVHosts {
  my $VHOSTS = $vhosts_conf;
  my $HTTPD = $httpd_conf;

  print "‘®§¤*Ґ¬ Ў«®ЄЁ ўЁавг*«м*ле е®бв®ў...\n";

  if(!-e $HTTPD) {
    die "  ЌҐ г¤*Ґвбп **©вЁ $HTTPD\n";
  }

  # Add comments.
  my $vhosts = '';
  $vhosts .= clean qq{
    #
    # ВНИМАНИЕ!
    #
    # Данный файл был сгенерирован автоматически. Любые изменения, внесенные в 
    # него, потеряются после перезапуска комплекса. Если вы хотите изменить
    # параметры какого-то отдельного хоста, вам необходимо перенести 
    # соответствующий блок <VirtualHost> в httpd.conf (там написано, куда именно).
    #
    # Пожалуйста, не изменяйте этот файл.
    #
  };

  # Read Vhost template
  my $num = 1;
  foreach my $host (VhostTemplate::getAllVHosts($HTTPD)) {
#    use Data::Dumper; print Dumper($host);
    $vhosts .= "\n\n# Host ".$host->{path}." ($num): \n";

    my $s = $host->{vhost};
    # Delete comments.
    $s=~s/#.*//mg if $num!=1;
    $s=~s/^[ \t]*[\r\n]+//mgx;    # delete empty lines

    # ‚бв*ў«пҐ¬ ЎгЄўг ¤ЁбЄ* - Їа®Є«пвлҐ а*§а*Ў®взЁЄЁ PHP ЎҐ§ нв®Ј® *Ґ ¬®Јгв *ЁЄ*Є!
    $s=~s{^(\s* DocumentRoot \s+ "?)(/)}{$1$CNF{subst_drive}$2}mgxi;

    $vhosts .= $s;
  } continue {
    $num++;
  }

  # Remove duplicate Listen directives.
  my %dup = ();
  $vhosts =~ s{^\s* Listen \s+ "? ([^\s"]+) "?}{ ($dup{lc $1}++)? '#'.$& : $& }megx;

  # Remove duplicate NameVirtualHost.
  %dup = ();
  $vhosts =~ s{^\s* NameVirtualHost \s+ "? ([^\s"]+) "?}{ ($dup{lc $1}++)? '#'.$& : $& }megx;
  
  # Open output file.
  if(!open(local *F, ">$VHOSTS")) {
    out qq{
      ‚Ќ€ЊЂЌ€…!
      ЌҐ г¤*Ґвбп ®вЄалвм д*©« $VHOSTS ** §*ЇЁбм. 
      Џа®¤®«¦Ґ*ЁҐ а*Ў®вл *Ґў®§¬®¦*®.
    };
    waitEnter();
    die "\n";
  }
	print F $vhosts;
	close F;
  
  print "  „®Ў*ў«Ґ*® е®бв®ў: ".($num-1)."\n";
}

sub checkApacheIfRunning {
	my ($exe) = $CNF{apache_exe} =~ /^(\S+)/sg;
	my $name = $basedir . '\\' . $exe;
  return !open(local *F, ">>$name");
}

return 1 if caller;
 
А в Apche так кто-нибудь делал? Может есть готовое решение?

Привет!
для того, чтобы "Нужно чтобы открывался по Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся"

Впиши в файл httpd.conf такое:

Код:
Listen 127.0.0.1:80
<VirtualHost *:*>
  DocumentRoot "C:/путь_к_папке_test1_ru_для_htdocs"
  ServerName "[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL]"
  ServerAlias "[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru"]www.[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL][/URL]"
  ScriptAlias /cgi/ "C:/путь_к_папке_test1_ru_для_cgi/cgi-bin/"
  ScriptAlias /cgi-bin/ "C:/путь_к_папке_test1_ru_для_cgi/cgi-bin/"
  ErrorLog "C:/путь_к_папке_test1_ru/error.log"
</VirtualHost>

То есть там тебе нужно указать "к чему прислушываться" апачу. Он "ловит" запросы с IP 127.0.0.1 на 80 порту. Так по умолчанию, лучше ничего не менять. Закачивай свои PHP скрипты и прочее в папку "C:/путь_к_папке_test1_ru_для_htdocs/"

Дале тебе нужно в файл C:\WINDOWS\system32\drivers\etc\hosts
дописать строки:

Код:
127.0.0.1 <A href="http://www.test1.ru/">www.[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL]
127.0.0.1 [URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL]

Перезапусти апач. Открывай в бровзере test1.ru. Будет работать. Можешь в hosts вписать другой IP. Тогда его нужно вписать такой же в файл httpd.conf

Аналогично для test2.ru.

PS. в hosts писать без а хреф=...
функции форума что-то глюканули
 
в денвере за автосоздание хостов отвечает скрипт на перл.
напишите себе подобное и будет вам счастье
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху