Преобразовать Правила nginx для .htacees

Я пытаюсь преобразовать свои блоки nginx в файл apache (.htaccess) но не смог этого добиться. Не могли бы вы помочь мне с этим

location = /index.php {
  if ($arg_a = get) {
    return 301 /$arg_a/$arg_b;
  }
}

location = /home.php {
 return 301 /$arg_bool;
}

для action = get? Вот как выглядел URL устаревшего веб-сайта:

/index.php?action=get&id=5000849

(код выше переписывается на / get / 5000849)

2
задан 22 April 2019 в 14:06
1 ответ

(приведенный выше код переписывается в / get / 5000849)

Приведенный выше код Nginx представляет собой внешнее (301) перенаправление , а не строго «перезапись». (Хотя вам, скорее всего, потребуется переписать позже и ваш файл .htaccess .)

Для перенаправления /index.php?action=get&id=5000849 на / get / 5000849 в .htaccess вы должны сделать что-то вроде следующее в верхней части вашего файла .htaccess :

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^action=(get)&id=(\d+)
RewriteRule ^index\.php$ /%1/%2 [R=302,L]

Часть get могла быть жестко закодирована вместо использования обратной ссылки, поскольку она кажется постоянной. Хотя использование обратной ссылки сохраняет повторение (что было бы моим предпочтением).

Проверка переменной среды REDIRECT_STATUS заключается в том, чтобы избежать цикла перенаправления, поскольку я предполагаю , что у вас уже есть директива, которая перезаписывает запрос обратно в index.php позже в вашем файле конфигурации. (?)

% 1 и % 2 - это обратные ссылки на захваченные группы в последнем сопоставленном CondPattern (предшествующем директиве RewriteCond ).

Это перенаправление следует использовать только для перенаправления старой структуры URL-адресов для поддержания SEO. Это не должно быть неотъемлемой частью функциональности вашего сайта.

NB: Протестируйте с 302 (временными) перенаправлениями, чтобы избежать проблем с кешированием. И меняйте на 301 (постоянный) только тогда, когда вы уверены, что он работает нормально. Перед тестированием вам необходимо очистить кеш браузера.

ОБНОВЛЕНИЕ: home.php? Bool = contact перенаправит на / contact

Для второй части применяется тот же принцип, за исключением того, что есть только один параметр URL вместо двух. Например:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^bool=([a-z]+)
RewriteRule ^home\.php$ /%1 [R=302,L]

Предполагается, что в вашем примере всегда a-z (нижний регистр) - как в вашем примере. При необходимости отрегулируйте регулярное выражение [a-z] + .

1
ответ дан 3 December 2019 в 12:29

Теги

Похожие вопросы