переписать правило, чтобы перенаправить на SEO дружественный URL - PullRequest
0 голосов
/ 16 апреля 2019

Я создаю дружественный для SEO URL-адрес страницы, на которой есть строка запроса, используя код перезаписи ниже

RewriteRule certificates/finance curr/certificate.php?id=26 [L,QSA]

но теперь я хочу перенаправить с не дружественного URL-адреса, то есть curr / certificate.php? Id = 26, на более дружественный, т.е. сертификаты / финансы, если кто-то перейдет на не дружественный URL-адрес

Я попытался добавить следующий код

RewriteCond %{QUERY_STRING} id=26
RewriteRule dir1/xyz.php /certificates/finance? [R=301,L]

но тогда я получаю слишком много ошибок перенаправления. Можно ли создать URL-адрес, оптимизированный для SEO, и заставить пользователей переходить по этому URL-адресу, если они переходят на URL, не оптимизированный для SEO.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 16 апреля 2019

Вам необходимо сопоставить переменную %{THE_REQUEST} вместо %{QUERY_STRING}.Поскольку вы сначала перенаправляете, а затем переписываете тот же запрос, ваш внутренний RewriteRule конфликтует с правилом с флагом R и вызывает ошибку бесконечного цикла.

RewriteCond %{THE_REQUEST} /curr/certificate.php\?id=26\s [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]

Очистите кэш браузера перед проверкой этих новых перенаправлений.

...