Модуль rewrite позволяет переписывать\модифицировать к запросы к apache, делать перенаправления или запрещать доступ.
Т.е. пользователь пишет что-то в сроке браузера, берем это что-то и переписываем в формат понятный серверу apache.
Рассмотрим на примере DokuWiki.
Пользователь пишет в строке mykb.ru/qnote, а серверу, что бы он показал страничку, надо передать адрес в виде mykb.ru/doku.php?id=qnote.
За добавление doku.php?id= в запрос как раз и отвечает этот модуль
Для подключение модуля, в /etc/httpd/conf/httpd.conf добавляем строчку (она по дефолту уже должна быть) и перезапускаем apache.
LoadModule rewrite_module modules/mod_rewrite.so
Модуль оперирует следующими директивами:
Дополнительные опции RewriteRule:
Шпаргалка - http://wiki.ua.sapo.pt/w/images/4/49/Mod_rewrite-cheat-sheet-v2.pdf, mod_rewrite-cheat-sheet-v2.pdf
Правила которые делают красивые ссылки для Dokuwiki.
RewriteEngine on RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L] RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L] RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L] RewriteRule ^$ doku.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) doku.php?id=$1 [QSA,L] RewriteRule ^index.php$ doku.php
Разбор примера:
RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L] RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L] RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L]
RewriteRule ^$ doku.php [L]
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule doku.php?id doku.php?id=$1 [QSA,L]
RewriteRule ^index.php$ doku.php
С сетей 10.40.1.0/24 и 10.40.30.0/24 надо дать досту к graphs.noc.company.name/nsk/*.
При попытке пойти по другим адресам сделать перманентный редирект на graphs.noc.company.name/nsk/index.html.
<VirtualHost *:443> ServerName graphs.noc.company.name ServerAdmin admin@company.name DocumentRoot /var/www/graphs/ ##### SSLEngine on SSLCertificateFile /etc/httpd/ssl/graphs.noc.company.name.crt SSLCertificateKeyFile /etc/httpd/ssl/graphs.noc.company.name.key ##### <Directory "/var/www/graphs"> RewriteEngine on RewriteCond %{REMOTE_ADDR} ^(10\.40\.(1|30)\.[0-9]{1,3})$ RewriteCond %{REQUEST_URI} !^nsk/(.*)$ [NC] RewriteRule ^(.*)$ https://graphs.noc.company.name/nsk/index.html [L,R=301] </Directory> #### ErrorLog logs/graphs_error.log CustomLog logs/graphs_access.log common </VirtualHost>
Логика:
Разбор примера:
RewriteCond %{REMOTE_ADDR} ^(10\.40\.(1|30)\.[0-9]{1,3})$
RewriteCond %{REQUEST_URI} !^nsk/(.*)$ [NC]
RewriteRule ^(.*)$ https://graphs.noc.company.name/nsk/index.html [L,R=301]
AllowOverride подключает файл .htaccess и позволяет опеределить конфигурацию каких директив можно перезаписать в файле .htaccess.
Ключи директивы AllowOverride:
Подключаем .htaccess который лежит в /var/www/someserver/ и разрешаем переписать все директивы.
<VirtualHost *:443> ServerName someserver.ru ServerAdmin admin@someserver.ru DocumentRoot /var/www/someserver/ ##### SSLEngine on SSLCertificateKeyFile /etc/letsencrypt/live/someserver/privkey.pem SSLCertificateFile /etc/letsencrypt/live/someserver/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/someserver/chain.pem #### <Directory "/var/www/someserver"> AllowOverride All </Directory> #### ErrorLog logs/someserver_error.log CustomLog logs/someserver_access.log common </VirtualHost>
Директива позволяет просматривать содержимое каталога в отсутствии индексного файла (index.html, index.php и пр.).
Как правило эту директиру отключают по соображением безопасности и при попытке просмотреть содержимое каналога сервер выдаст 403 ошибку:
error] [client 10.20.30.40] Directory index forbidden by Options directive: /var/www/noc/prj/
В /var/www/noc/prj/ лежат файлы которым надо предоставить доступ (см. ниже), в этом случае разрешаем индексирование и конфиг будет выглядеть след. образом:
<Directory "/var/www/noc/prj"> Options Indexes Order deny,allow Deny from all Allow from 10.20.30.40 10.20.31.40 </Directory>
Директива позволяет ограничить доступ к каталогу или файлу по ip адресу и может быть прописана в файле .htaccess или в настройках сайта.
Директирва имет два режима работы:
Пример, разрешаем доступ к каталогу с двух ip адресов:
<Directory "/var/www/noc/prj"> Order deny,allow Deny from all Allow from 10.20.30.40 10.20.31.40 </Directory>