Тесты Apache mod_rewrite для nginx
Обзор
Этот каталог содержит тестовые файлы и правила .htaccess для проверки функционала модуля ngx_http_apache_rewrite_module в nginx, который обеспечивает совместимость с Apache mod_rewrite.
Файлы
| Файл | Назначение |
|---|---|
index.html |
Главная страница - назначение для перенаправления .xmx файлов |
stop.html |
Заблокированная страница (должен возвращать 403) |
redirect.html |
Внутреннее перенаправление на show.html (URL не меняется) |
show.html |
Показывается вместо redirect.html при внутреннем rewrite |
test.xmx |
Тестовый файл для проверки правила перенаправления .xmx расширения |
Правила .htaccess
1. Перенаделение файлов с расширением .xmx на index.html
RewriteRule \.xmx$ /index.html [R=301,L]
Ожидаемое поведение:
- Запрос
http://localhost/test/test.xmx→ 301 Redirect к/test/index.html - URL в браузере изменится на
/test/index.html
2. Блокировка доступа к stop.html (403 Forbidden)
RewriteCond %{REQUEST_FILENAME} =stop.html
RewriteRule ^ - [F,L]
Ожидаемое поведение:
- Запрос
http://localhost/test/stop.html→ 403 Forbidden ("Доступ запрещен") - Страница не будет отображаться
3. Внутреннее перенаправление redirect.html на show.html
RewriteRule ^redirect\.html$ show.html [L]
Ожидаемое поведение:
- Запрос
http://localhost/test/redirect.html→ показывается содержимое show.html - URL в браузере остается
/test/redirect.html(не происходит перенаправления)
4. Перенаделение подкаталога subdir на index.html
RewriteRule ^subdir/?$ /index.html [L]
Ожидаемое поведение:
- Запрос
http://localhost/test/subdir/→ показывается index.html - URL в браузере остается
/test/subdir/
5. Дополнительные проверки
- Флаг
[L](Last) - останавливает обработку правил после выполнения - Флаг
[F](Forbidden) - возвращает ошибку 403 Forbidden - Флаг
[R=301]- внешнее перенаправление с кодом статуса 301 Moved Permanently
Порядок применения правил
В модуле nginx приоритет следующий:
- Правила из .htaccess (высокий приоритет)
- Правила из nginx конфигурации (низкий приоритет)
При наличии флага [END] в правилах .htaccess, дальнейшая обработка всех правил останавливается.
Поддержка флагоv mod_rewrite
| Флаг | Значение | Описание |
|---|---|---|
L |
Last | Остановить обработку остальных правил |
F |
Forbidden | Заблокировать доступ (403) |
R=301 |
Redirect | Внешнее перенаправление с кодом 301 |
END |
End | Полностью остановить обработку rewrite |
Примеры запросов для тестирования
# Перенаделение .xmx файла на index.html
curl -I http://localhost/test/test.xmx
# Ожидаемый ответ: HTTP/1.1 301 Moved Permanently
# Location: /test/index.html
# Блокировка stop.html
curl -I http://localhost/test/stop.html
# Ожидаемый ответ: HTTP/1.1 403 Forbidden
# Внутреннее перенаправление redirect.html на show.html
curl -I http://localhost/test/redirect.html
# Ожидаемый ответ: HTTP/1.1 200 OK (content из show.html)
# Перенаделение subdir на index.html
curl -I http://localhost/test/subdir/
# Ожидаемый ответ: HTTP/1.1 200 OK (content из index.html)
Установка и запуск
Для запуска тестов потребуется:
- Скомпилированный nginx с модулем
ngx_http_apache_rewrite_module - Конфигурация nginx, указывающая каталог
test/как корень сайта - Активированный флаг
.htaccessчерез директивуHtAccess on
Пример конфигурации:
server {
listen 80;
server_name localhost;
location /test {
root /workspaces/test1/test;
HtAccess on;
HtAccessFile .htaccess;
}
}