Через файл htaccess я пытаюсь перенаправить / services
на / services / onetime
, но он перенаправляет меня на / services / onetime / onetime / onetime / ...
В чем проблема с кодом и есть ли способ сделать это?
Это код, который я использовал:
redirect 301 /services/ /services/onetime/
перенаправление 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]