Назад | Перейти на главную страницу

Почему мое правило перезаписи приводит к «400: неверный запрос»?

У меня есть эти правила перезаписи в конфигурации моего сайта:

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, где этого не произошло, поэтому я все еще в замешательстве, но, по крайней мере, он работает.