2017-01-06 2 views
1

Итак, у меня есть следующие ссылки:Apache перенаправлять все дочерние каталоги, за исключением одного

www.example.com/parent/child1 
www.example.com/parent/child2 
www.example.com/parent/child3 
www.example.com/parent/cool-feature 
www.example.com/parent/product 
etc... 

мне нужно перенаправить все ребенок за исключением child2 к новому домену.


До сих пор я придумал:

RedirectMatch ^/parent(?!/child2) http://www.new-example.com/parent/ 

Это работает для:

www.example.com/parent/child2 

но не для:

www.example.com/parent/child2/ 

благодаря слэш


без толку, я пытался:

RedirectMatch ^/parent(?!/child2/) http://www.new-example.com/parent/ 
RedirectMatch ^/parent(?!/child2\/) http://www.new-example.com/parent/ 
RedirectMatch ^/parent(?!/child2)/ http://www.new-example.com/parent/ 
RedirectMatch ^/parent/(?!child2)/ http://www.new-example.com/parent/ 
+0

С вашим правилом, ни '/ родителя/child2', ни'/родитель/child2/'будет перенаправлен –

+0

Я согласен с @DusanBajic, ваш первоначальный' директива RedirectMatch', кажется, работает хорошо для меня. Есть ли у вас какие-либо другие директивы, которые, возможно, противоречат друг другу? Являются ли директории, файлы или URL-адреса 'child1',' child2' и т. Д. Сопоставлены с передним контроллером? Полагаю, что позже, так что у вас есть существующие директивы mod_rewrite? Кроме того, очистите кеш браузера, если ранее был заблокирован ошибочный 301. – DocRoot

+0

@DusanBajic Да, это то, что я ищу. К сожалению, '/ parent/child2 /' перенаправляется; Я не хочу, чтобы он перенаправлялся. – MonkeyZeus

ответ

2

Как уже упоминалось в комментариях, само по себе, ваша первая директива должна работать, как предполагалось. Ни один из /parent/child2, /parent/child2/ или /parent/child2/anything не должен быть перенаправлен.

Однако, поскольку у вас есть «другие директивы», в том числе «фронт-контроллер», у вас может быть конфликт. В частности, поскольку ваш фронт-контроллер, вероятно, использует mod_rewrite, а RedirectMatch - это директива mod_alias. mod_rewrite всегда будет выполняться первым, несмотря на видимый порядок в .htaccess. Но эти перенаправления должны выполняться сначала перед контроллером.

Попробуйте изменить это на перенаправление mod_rewrite и убедитесь, что он находится в верхней части вашего файла .htaccess, перед передним контроллером.

RewriteRule ^parent(?!/child2) http://www.new-example.com/parent/ [R=302,L] 
+0

Спасибо за этот ответ, он выглядит очень многообещающим, но, к сожалению, я не смогу сделать больше испытаний до понедельника. До тех пор, ура! – MonkeyZeus

+0

Следуя советам в этом ответе, я, к сожалению, не имел успеха в подавлении перенаправления, когда присутствует конечная косая черта. Я собираюсь связаться с продавцом и посмотреть, смогут ли они понять это. Поскольку этот ответ верен в теории, и я не имею права делиться всеми правилами в файле htaccess, я с радостью соглашусь с этим ответом. Еще раз спасибо! – MonkeyZeus

Смежные вопросы