Почему не работает RewriteRule?

Здравствуйте. Не могу разобраться с настройкой .htaccess. Есть рабочая папка "test" на локальном сервере: localhost/test/. В папке лежит index.html и, собственно, .htaccess. Возникли следующие вопросы:
1)
RewriteEngine On
RewriteRule ^test/(first|second|third)$ index.html [L]
RewriteRule ^(.+)$ 404.html [L]

Логика простая - при запросе "localhost/test/first", "localhost/test/second" или "localhost/test/third" будет редирект на index.html, иначе на файл с ошибкой 404. Проблема в том, что первое правило не срабатывает. Как я понял это ошибка в регулярном выражение, только вот какая?
P.S. Вместе последнего правила пробовал "ErrorDocument 404 /404.html", но почему-то не работает :/

2) В примерах замечал, что правилу всегда ставят флаг редиректа R=301, но на локальном сервере выдает 403 Forbidden. Почему?

Заранее благодарю за помощь!
  • Вопрос задан
  • 631 просмотр
Решения вопроса 1
@dodo512
https://habr.com/en/company/sprinthost/blog/129560/
Первому RewriteRule передается путь от того места, где находится .htaccess, до запрошенного файла.

7406745022beddf6d45164727c2d5001.png
Если .htaccess находится в папке /test/, то вместо ^test/(first|second|third)$ должно быть ^(first|second|third)$

Флаг [L] заканчивает обработку всех правил только в <VirtualHost>, а в .htaccess запрос будет проходить через все RewriteRule снова и снова, до тех пор, пока он не перестанет меняться.

Начиная с версии Apache 2.3.9 доступен флаг END
RewriteEngine On
RewriteRule ^(first|second|third)$ index.html [END]
RewriteRule ^(.+)$ 404.html [END]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы