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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не работает отрицание для группы директивы RedirectMatch (в Apache)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Не получается отрицать групы RedirectMatch 301 !^/(one|two|three) http://some.site
like_you
Отправлено: 04 Сентября, 2014 - 22:02:33
Post Id


Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010  
Откуда: Харківська обл. с. Криштопівка


Помог: 0 раз(а)




Хочу чтобы с помощью 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

Как же правильно написать?

(Отредактировано автором: 04 Сентября, 2014 - 22:03:34)



-----
Створюю український хабр
 
 Top
nkl
Отправлено: 05 Сентября, 2014 - 09:09:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




А использование Apach принципиально из-за того, что только он доступен на хостинге или есть вариант поставить nginx в качестве основго веб-сервера?

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


Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010  
Откуда: Харківська обл. с. Криштопівка


Помог: 0 раз(а)




Да, мой хостер не предоставляет выбора кроме как Apache, но думаю не в этом проблема.
Ваш код наверняка не отрицает значения в группе, а наоборот - переадресация будет только в случаи совпадения значений с указанной группы.

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

(Отредактировано автором: 05 Сентября, 2014 - 19:08:49)



-----
Створюю український хабр
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB