Ubuntu Server/Apache2/PHP. Настройка для работы с htaccess

Начнем с установки. Перед установкой веб сервера обновим систему. Обновим список репозиториев и произведем поиск индексов обновленных версий программ, драйверов, ядра и всего прочего

    sudo apt-get update

Далее установим все доступные обновления

    sudo apt-get upgrade

После этого приступим к установке apache2 и php5

    sudo apt-get install apache2
    sudo apt-get install php5
   
Для проверки успешности установки веб-сервера введите в браузере - http://127.0.0.1
Сервер должен вернуть сообщение похожее на - "It`s work". Далее нужно включить поддержку
php5 в apache. Для этого установим необходимый пакет с последующим включением модуля:

    sudo apt-get install libapache2-mod-php5
    sudo a2enmod php5

Без этого пакета при обращении к вашему сайту (предполагается, что в корне лежит индексный php-файл), веб-сервер будет предлагать вам сохранить копию корневого php-файла.

Теперь займемся созданием нашего тестового сайта - test.ru

Во первых - определим корневую директорию нашего сайта. По умолчанию после установки apache2 в ubuntu server будет создан default сайт, с корнем в /var/www
В его недрах будет лежать тот самый html-файл, который возвращает сообщение о работоспособности нашего веб-сервера. Давайте займем его место. Для этого нужно перейти в раздел - /etc/apache2/sites-available:

    cd /etc/apache2/sites-av*

и далее создать файл конфигурации для нашего сайта (я использую редактор nano)

    sudo nano test
   
В нем пропишем на первых порах следующие настройки:

<VirtualHost *:80>
DocumentRoot /var/www/
ServerName test.ru
ServerAdmin test@gmail.com
<Directory /var/www/> 
    DirectoryIndex index.php 
    AllowOverride All
</Directory>
<FilesMatch "^\.ht">
    Order allow,deny
    Allow from all
    Satisfy All
</FilesMatch>
</VirtualHost>

Сохраняем внесенные настройки. Далее деактивируем первоначальный сайт и активируем наш тестовый сайт

    sudo a2dissite default && sudo a2ensite test.ru

Для предупреждения такого рода ошибки

apache2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

нужно либо в свой файл настроек, либо в /etc/apache2/httpd.conf, либо в /etc/apache2/conf.d, создать свой файл настроек, и вписать туда
  
    ServerName localhost

Я выбрал второй вариант. Также сюда можно поместить и такие настройки
   
    ## Для того, чтобы Apache интерпретировал php и не предлагал сохранить php-файл
    AddType application/x-httpd-php .php .phtml

    ## Установка кодировки UTF-8 по умолчанию
    AddDefaultCharset UTF-8
   
Но это можно будет сделать и в .htaccess. Далее внесем имя сайта в список хостов сервера

    sudo nano /etc/hosts

и впишем через пробел имя нашего сайта

    127.0.0.1 localhost test.ru
   
Далее очищаем директорию /var/www и создаем корневой php-файл - index.php - вот с таким содержимым:

  <?php
      phpinfo();
  ?>

Перезагружаем apache

    sudo /etc/init.d/apache2 restart

Пробуем обратиться по адресу http://test.ru в веб браузере и если все сделано правильно, на выходе должен появиться массив сообщений о текущих настройках php. Кстати файл настроек php лежит в директории (помним, что в нашем случае php собран как модуль apache)

    /etc/php5/apache2/php.ini

Далее создаем файл .htaccess в той же директории, где расположен index.php и добавляем в него следующие правила (так как в файле конфигурации в Directory указано - AllowOverride All, значит .htaccess будет переопределять все директивы apache)

   AddDefaultCharset utf8
    RewriteEngine On
    RewriteRule ^([a-zA-Z0-9]+)/(.*)$ index.php?path1=$1&var=2&param=%{QUERY_STRING} [L]
    RewriteRule ^([a-zA-Z0-9]*)$ index.php?path1=$1&var=1&param=%{QUERY_STRING} [L]
   
Для проверки работы данных правил добавим в index.php следующие строчки

    <?php
        echo 'test.ru';
        echo '</br>';
        print_r($_REQUEST);
    ?>
   
Теперь пробуем набрать в адресной строке браузера http://test.ru/tester/?p=16
Если все хорошо, значит на выходе должны получить следующее сообщение:

    test.ru
    Array ( [path] => tester [var] => 2 [param] => p=16 )

Если же будете получать 500 ошибку (internal server error), то либо вы допустили синтаксическую ошибку, либо у вас не задействован модуль mod_rewrite. Для диагностики можно попробовать поправить правила в htaccess следующим образом

    AddDefaultCharset utf8
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^([a-zA-Z0-9]+)/(.*)$ index.php?path1=$1&var=2&param=%{QUERY_STRING} [L]
        RewriteRule ^([a-zA-Z0-9]*)$ index.php?path1=$1&var=1&param=%{QUERY_STRING} [L]
    </IfModule>

Если данная ошибка пропадет, но правила все также не будут работать, значит у вас точно не включен нужный модуль. Включаем данный модуль

    sudo a2enmod rewrite

И снова проверяем работу правил htaccess. Все должно непременно заработать.
Если после настройки веб-сервера, что-то все-таки будет работать некорректно, стоит переустановить apache. Для его удаления введите команду

    sudo apt-get purge apache2 apache2-utils apache2.2-bin apache2-common

И не забудьте очистить/удалить следующие директории

    /etc/apache2
    /var/www
   
Также стоит отметить, если на сервере не поднят DNS-сервер, тогда обращение к нашему тестовому сайту будет напрямую через его ip-адрес - http://XX.XX.XX.XX, чтобы все-таки стучаться к нему по его имени, стоит либо поднять DNS-службу, либо прописать на конечном компе - откуда вы будете стучаться - в хостах соответствие ip сервера его имени

    XX.XX.XX.XX        test.ru

Для Win32/64 как правило данное соответствие расположено в директории

    C:\Windows\System32\drivers\etc\hosts

Всем удачи :)