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