#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-запрос клиенту, поскольку перенаправления обычно используются, когда вам нужно отправить клиента на другой сервер.