Интеллектуальное перенаправление

#apache #http-redirect

#apache #http-перенаправление

Вопрос:

Я новичок, использующий Apache 2.4.18.

У меня есть URL-адреса со следующей формой, которые я хотел бы перенаправить.

 Current URL: https://www.example.org/page/10/
Desired URL: https://www.example.org/index.php/page/10/
  

Если я использую следующее правило, я могу изменить запрос, например, для страницы 2:

 Redirect permanent /page/2/ /index.php/page/2/
  

Тем не менее, я хочу перенаправить без необходимости жестко кодировать все страницы на моем сайте. Я пробовал следующее, мой браузер выходит из строя после многих перенаправлений:

 RedirectMatch /page/(.*)/$ /index.php/page/$1/
  

И использование следующего не удается, я не знаю, почему:

 RedirectMatch "https://www.example.org/page/(.*)/$" "https://www.example.org/index.php/page/$1/"
  

Что я делаю не так?

Ответ №1:

В вашей строке

RedirectMatch /page/(.*)/$ /index.php/page/$1/

/page/2/ фактически перенаправит на /index.php/page/2/ , но этот новый URL-адрес все равно будет соответствовать вашему RedirectMatch регулярному выражению и создаст другое перенаправление. Вот почему он перенаправляет бесконечно, пока браузер не откажется (см. Этот пример).

Я бы попробовал с RedirectMatch ^/page/(.*)/$ /index.php/page/$1/ , поэтому при перенаправлении /index.php/page/2/ он больше не будет совпадать ^/page/(.*)/$ и не будет создавать рекурсивные перенаправления.

В качестве запоздалой мысли, почему бы не использовать RewriteRule вместо этого? Это сэкономило бы дополнительный HTTP-запрос клиенту, поскольку перенаправления обычно используются, когда вам нужно отправить клиента на другой сервер.