128 lines
5.1 KiB
Markdown
128 lines
5.1 KiB
Markdown
# Тесты 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
|
||
|
||
```apache
|
||
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)
|
||
|
||
```apache
|
||
RewriteCond %{REQUEST_FILENAME} =stop.html
|
||
RewriteRule ^ - [F,L]
|
||
```
|
||
|
||
**Ожидаемое поведение:**
|
||
- Запрос `http://localhost/test/stop.html` → **403 Forbidden** ("Доступ запрещен")
|
||
- Страница не будет отображаться
|
||
|
||
### 3. Внутреннее перенаправление redirect.html на show.html
|
||
|
||
```apache
|
||
RewriteRule ^redirect\.html$ show.html [L]
|
||
```
|
||
|
||
**Ожидаемое поведение:**
|
||
- Запрос `http://localhost/test/redirect.html` → **показывается содержимое show.html**
|
||
- URL в браузере остается `/test/redirect.html` (не происходит перенаправления)
|
||
|
||
### 4. Перенаделение подкаталога subdir на index.html
|
||
|
||
```apache
|
||
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 приоритет следующий:
|
||
|
||
1. **Правила из .htaccess** (высокий приоритет)
|
||
2. **Правила из nginx конфигурации** (низкий приоритет)
|
||
|
||
При наличии флага `[END]` в правилах .htaccess, дальнейшая обработка всех правил останавливается.
|
||
|
||
## Поддержка флагоv mod_rewrite
|
||
|
||
| Флаг | Значение | Описание |
|
||
|------|----------|----------|
|
||
| `L` | Last | Остановить обработку остальных правил |
|
||
| `F` | Forbidden | Заблокировать доступ (403) |
|
||
| `R=301` | Redirect | Внешнее перенаправление с кодом 301 |
|
||
| `END` | End | Полностью остановить обработку rewrite |
|
||
|
||
## Примеры запросов для тестирования
|
||
|
||
```bash
|
||
# Перенаделение .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)
|
||
```
|
||
|
||
## Установка и запуск
|
||
|
||
Для запуска тестов потребуется:
|
||
|
||
1. Скомпилированный nginx с модулем `ngx_http_apache_rewrite_module`
|
||
2. Конфигурация nginx, указывающая каталог `test/` как корень сайта
|
||
3. Активированный флаг `.htaccess` через директиву `HtAccess on`
|
||
|
||
Пример конфигурации:
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name localhost;
|
||
|
||
location /test {
|
||
root /workspaces/test1/test;
|
||
|
||
HtAccess on;
|
||
HtAccessFile .htaccess;
|
||
}
|
||
}
|
||
```
|