Правило перезаписи для перезаписи старых в красивые URL

Я хочу, чтобы https://www.example.com/somePage.php?id=1234 был перенаправлен на https: //www.example. com / tool / 1234 (чтобы унаследованные ссылки и закладки работали).

Думаю, я близок, но это не работает ...

RewriteRule ^somePage.php?toolid=([0-9]+)$ /tool/$1 [R=301,L]

Что здесь не так?

1
задан 11 January 2017 в 21:03
1 ответ

. Невозможно сопоставить строку запроса в шаблоне RewriteRule ]. Вам необходимо использовать директиву RewriteCond и сравнить ее с серверной переменной QUERY_STRING .

Но также, если у вас есть внутренняя перезапись позже в вашем файле конфигурации, которая перезаписывает обратно в ( real) некрасивый URL-адрес, то вы не можете выполнить простое перенаправление, так как это приведет к циклу перенаправления. Убедитесь, что вы перенаправляете только первоначальный запрос, а не перезаписанный URL.

Предполагая, что это .htaccess , на основе существующего шаблона RewriteRule , попробуйте ниже, в верхней части файла конфигурации:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^toolid=(/d+)$
RewriteRule ^somePage\.php$ /tool/%1 [R=301,L]

Обратите внимание, однако, что URL-адреса вашего примера отличаются от вашего примера кода. Я использовал ваш пример кода.

Переменная среды REDIRECT_STATUS пуста при первоначальном запросе, но получает значение «200» после успешной внутренней перезаписи. Таким образом, это позволяет избежать цикла перенаправления в файлах для каждого каталога .htaccess .

Убедитесь, что вы очистили кеш браузера, так как все ошибочные 301-е (во время тестирования) будут кэшированы браузером.

1
ответ дан 3 December 2019 в 23:36

Теги

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