Я хочу, чтобы 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]
Что здесь не так?
. Невозможно сопоставить строку запроса в шаблоне 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-е (во время тестирования) будут кэшированы браузером.