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

Правило перезаписи для перезаписи старых в красивые 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]

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

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

Но также, если у вас есть внутренняя перезапись позже в вашем файле конфигурации, которая перезаписывает (реальный) уродливый 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-е (во время тестирования) будут кешированы браузером.