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

Преобразование правил nginx в .htaccess

Я пытаюсь преобразовать свои блоки 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)

(приведенный выше код переписывается в / 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]

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