Я пытаюсь преобразовать свои блоки 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]
Предполагается, что
в вашем примере всегда a-z (нижний регистр) - как в вашем примере. При необходимости отрегулируйте регулярное выражение [a-z] +
.