Через файл htaccess пытаюсь перенаправить /services
к /services/onetime
но он перенаправляет меня на /services/onetime/onetime/onetime/...
В чем проблема с кодом и есть ли способ это сделать?
Это код, который я использовал:
redirect 301 /services/ /services/onetime/
redirect 301 /services/ /service/onetime/
(Предполагая, что это просто опечатка в целевом URL?)
Mod_alias Redirect
Директива соответствует префиксу и добавляет все после совпадения в конец целевого URL. Таким образом, это также будет соответствовать перенаправленному URL-адресу /services/onetime/
а затем добавьте все после совпадение (т.е. onetime/
) на конец /services/onetime/
и т. д. и т. д., пока не будет достигнут предел перенаправления браузеров.
Вам нужно будет использовать (mod_alias) RedirectMatch
вместо этого директива, которая использует регулярное выражение. Например:
RedirectMatch 301 ^/services/$ /services/onetime/
это только Спички /services/
и перенаправляет на /services/onetime/
(включая косые черты в конце).
Перед тестированием убедитесь, что вы очистили все промежуточные кеши, поскольку все предыдущие (ошибочные) перенаправления 301, скорее всего, были кэшированы браузером.
Однако, если у вас есть существующие директивы mod_rewrite (т.е. RewriteRule
), то вам следует подумать об использовании mod_rewrite вместо этого перенаправления, чтобы избежать потенциальных конфликтов. Например:
RewriteRule ^services/$ /services/onetime/ [R=301,L]
Вероятно, это нужно будет перед любые другие директивы mod_rewrite. Может быть проще протестировать временные (302) перенаправления, поскольку они не будут кэшироваться браузером, в отличие от постоянных (301) перенаправлений. Итак, убедитесь, что кеш вашего браузера очищен.
Это должно работать (если не вмешиваются другие правила):
RewriteEngine on
RewriteRule ^(.*)services /services/onetime [L,QSA]