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

Как перенаправить / services на / services / onetime?

Через файл 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]