У меня есть эти правила перезаписи в конфигурации моего сайта:
RewriteEngine on
RewriteRule ^app.php - [L]
RewriteRule ^(.*)$ app.php$0 [L]
Цель состоит в том, чтобы все запросы добавлялись к фронт-контроллеру «app.php». Последняя строка правил заставляет мой сервер отвечать «400: Bad Request» независимо от того, какой путь я пробую, даже если путь пустой. Я включил перезапись журнала и попробовал два пути: «/» и «/ логин». Вот что написано в журнале:
(2) init rewrite engine with requested uri / (3) applying pattern '^app.php' to uri '/' (3) applying pattern '^(.*)$' to uri '/' (2) rewrite '/' -> 'app.php/' (2) local path result: app.php/ (2) init rewrite engine with requested uri /login (3) applying pattern '^app.php' to uri '/login' (3) applying pattern '^(.*)$' to uri '/login' (2) rewrite '/login' -> 'app.php/login' (2) local path result: app.php/login
Согласно журналам это должно быть успешным. Если я удалю последнюю строку правил перезаписи и перейду по URL-адресу «app.php / login», то все заработает, как ожидалось.
Кто-нибудь знает, почему это не работает?
Примечание: В журналах ошибок ошибок нет.
Примечание: Полученные пути («app.php /», «app.php / login») отлично работают после удаления последнего правила перезаписи.
Я понял. По какой-то причине мне пришлось добавить "/" к пути перезаписи:
RewriteRule ^(.*)$ /app.php$0 [L]
В противном случае, видимо, любой путь перепишется на:
example.comapp.php/
У меня есть другой сервер с той же версией Apache, где этого не произошло, поэтому я все еще в замешательстве, но, по крайней мере, он работает.