Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не работает отрицание для группы директивы RedirectMatch (в Apache)
Форумы портала PHP.SU » PHP » Регулярные выражения » Не работает отрицание для группы директивы RedirectMatch (в Apache)

Страниц (1): [1]
 

1. like_you - 04 Сентября, 2014 - 22:02:33 - перейти к сообщению
Хочу чтобы с помощью Apache осуществлялась переадресация при всех URL, кроме тех, которые начинаются с one или two или three.
Пробую такое:
CODE (htaccess):
скопировать код в буфер обмена
  1. RedirectMatch 301 !^/(?:one|two|three) http://some.site

Похоже, что такая запись вообще не работает, как будто никаких директив и не добавлял.

Также пробовал и такое
CODE (htaccess):
скопировать код в буфер обмена
  1. RedirectMatch 301 ^/(?!one|two|three) http://some.site

В таком случае переадресовывает абсолютно все URL

Как же правильно написать?
2. nkl - 05 Сентября, 2014 - 09:09:47 - перейти к сообщению
А использование Apach принципиально из-за того, что только он доступен на хостинге или есть вариант поставить nginx в качестве основго веб-сервера?

Просто я совсем запамятовал как это делается в апче, но как в nginx помню, приблизительно так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. location ~ ^/(?:one|two|three) {
  2.       rewrite ^/(?:one|two|three) new.site.com;
  3. }
3. like_you - 05 Сентября, 2014 - 19:01:19 - перейти к сообщению
Да, мой хостер не предоставляет выбора кроме как Apache, но думаю не в этом проблема.
Ваш код наверняка не отрицает значения в группе, а наоборот - переадресация будет только в случаи совпадения значений с указанной группы.

Скорее всего неправильное регулярное выражение. Судя по подсведке регулярки в NetBeans, запись !^/(?:one|two|three) вообще не правильна, но я её написал по аналогии с примера директивы RewriteCond на сайте Apache.
А выражение ^/(?!one|two|three) не полное, и метчит все URI поскольку по-сути оно проверяет "нет ли между начальным слешем и позицией, где указана группа, перечисленных значений"...

 

Powered by ExBB FM 1.0 RC1