Я настроил следующие файлы конфигурации для своего сайта Apache и включил перезапись модов, но у меня возникли проблемы с запуском правила. Я вполне уверен, что это пропущенная конфигурация, но я не уверен, где она лежит. Я экспериментировал с разными конфигурациями, но не нашел подходящей.
Мой файл apache2.conf содержит следующее
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</Directory>
Мой файл 000-default.conf содержит следующее
<VirtualHost *:80>
DocumentRoot /var/www/html
RewriteEngine On
RewriteRule ^/Foo/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ /Baz/$1/Bar/$2/json
</VirtualHost>
Если я пойду на: http://localhost/Foo/sample/data
Ошибка в логах:
File does not exist: /var/www/html/Foo/sample/data
Однако, если я вручную перехожу к /Baz/sample/Bar/data/json, я получаю 200.
Обновлено: регулярное выражение было неправильным. исправлено, но проблема все еще возникает.
Похоже, что в ваших группах отсутствует скобка:
это:
^/Foo/(A-Za-z0-9]+)/(A-Za-z0-9]+)$
должно быть:
^/Foo/([A-Za-z0-9]+)/([A-Za-z0-9]+)$
Этот тип ошибки обычно заставляет сервер жаловаться на неправильную конфигурацию. Логи сервера проверяли?
Я принимаю это как ответ, так как это действительно была ошибка с моей стороны. Однако последнее исправление, благодаря которому у меня все заработало, заключалось в добавлении [PT] в конце правила. Без этого он пытался обслуживать файл вместо того, чтобы отслеживать URL-адрес в правильном месте.
Более подробную информацию о [PT] RewriteFlag можно найти в https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_pt.
Исправлено, но, к сожалению, та же проблема остается.