#apache #redirect #mod-rewrite
#apache #перенаправление #мод-переписать
Вопрос:
Я создаю дружественный к SEO URL-адрес для страницы со строкой запроса, используя приведенный ниже код перезаписи
RewriteRule certificates/finance curr/certificate.php?id=26 [L,QSA]
но теперь я хочу перенаправить с недружественного URL-адреса, т.е. curr / certificate.php?id=26, на более дружественный, т.е. certificates / finance, если кто-то зайдет на недружественный URL
Я попытался добавить следующий код
RewriteCond %{QUERY_STRING} id=26
RewriteRule dir1/xyz.php /certificates/finance? [R=301,L]
но тогда я получаю слишком много ошибок перенаправления. Есть ли способ создать дружественный к SEO URL-адрес и заставить пользователей переходить на этот URL-адрес, если они переходят на не дружественный к SEO URL-адрес.
Спасибо за любую помощь.
Ответ №1:
Вам нужно сопоставить с %{THE_REQUEST}
переменной вместо %{QUERY_STRING}
. Поскольку вы сначала перенаправляете, а затем переписываете один и тот же запрос, ваш внутренний RewriteRule конфликтует с правилом с R
флагом и вызывает ошибку бесконечного цикла.
RewriteCond %{THE_REQUEST} /curr/certificate.php?id=26s [NC]
RewriteRule ^ /certificate/finance? [L,R]
RewriteRule certificates/finance curr/certificate.php?id=26 [L,QSA]
Если ваша версия apache 2.4 , вы также можете использовать END
флаг в вашем RewriteRule, чтобы немедленно прекратить обработку перезаписи . Это позволит избежать ошибки бесконечного цикла при перенаправлении и перезаписи одного и того же запроса.
RewriteCond %{QUERY_STRING} ^id=26$ [NC]
RewriteRule ^curr/certificate.php$ /certificate/finance? [L,R]
RewriteRule certificates/finance curr/certificate.php?id=26 [QSA,END]
Очистите кэш браузера перед тестированием этих новых перенаправлений.