В /etc/apache2/apache2.conf добавлены директивы
RewriteEngine on
RewriteRule ^oldstuff\.html$ newstuff.html
a2enmod rewrite
svcadm restart svc:/network/apache2:default
while [ true ]; do sleep 5;svcs -a|grep apa; done
online* 11:03:07 svc:/network/apache2:default
online* 11:03:07 svc:/network/apache2:default
online 11:04:05 svc:/network/apache2:default
Командой pldd выяснено, что /usr/lib/apache2/modules/mod_rewrite.so подгружен
# cat /var/www/newstuff.php
<?php
print_r(apache_get_modules());
?>
Также отображает успешную загрузку модуля
Однако правила преобразования адресов не срабатывают. Для выяснения причины следует добавить в /etc/apache2/apache2.conf директивы протоколирования:
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 9
Анализом вывод команды
grep oldstuff\.html /var/log/apache2/rewrite.log
Выяснено, что надо скорретировать правило преобразования добавлением слешей:
RewriteRule ^/oldstuff\.html$ /newstuff.html
Чтобы для применения изменений не требовалась перезагрузка сервера, следует использовать .htaccess
Правила преобразования были перенесены в .htaccess
RewriteEngine On
RewriteBase /
RewriteRule ^/oldstuff\.html$ /newstuff.html
Анализом вывод команды
grep oldstuff\.html /var/log/apache2/rewrite.log
92.255.239.250 - - [03/Aug/2011:11:45:14 +0400] [188.128.114.221/sid#81a4ed8][rid#8333af0/initial] (2) init rewrite engine with requested uri /oldstuff.html
92.255.239.250 - - [03/Aug/2011:11:45:14 +0400] [188.128.114.221/sid#81a4ed8][rid#8333af0/initial] (1) pass through /oldstuff.html
Выяснено, что правила не подгружаются
В /etc/apache2/apache2.conf добавлены директивы
AccessFileName .htaccess
AllowOverride all
Перезапускаем apache. смотрим, его состояние
svcs -a|grep apa
maintance 11:54:29 svc:/network/apache2:default
через svcs -xv определяем файл лога и смотрим его:
cat /var/svc/log/network-apache2:default.log
Там написано
AllowOverride not allowed here
Прочитал внимательно описание директивы. Удалил ее из /etc/apache2/apache2.conf и разместил в конфиге сайта
cat /etc/apache2/sites-available/default
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Создание .htaccess
host:/var/www$ cat .htaccess
php_flag register_globals On
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^personal_cabinet/(.*)$ personal_cabinet/index.php [NC,L]
Теперь можно убрать директивы прокотолирования из /etc/apache2/apache2.conf