Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: перенаправление на другой адрес со всех страниц сайта, кроме некоторых каталогов
 
 автор: kb_nn   (23.04.2012 в 12:04)   письмо автору
 
 

помогите, пож-ста :)

читал-читал mod_rewrite, и никак.
то ли у меня проблемы с регулярными выражениями

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} /^[^(cat1)] OR
RewriteCond %{SCRIPT_FILENAME} /^[^(cat2)]
RewriteRule / http://newsite.ru/ [L]

  Ответить  
 
 автор: cheops   (23.04.2012 в 14:20)   письмо автору
 
   для: kb_nn   (23.04.2012 в 12:04)
 

Попробуйте строку
RewriteRule / http://newsite.ru/ [L]
заменить на
RewriteRule (.*) http://newsite.ru/ [L]
Когда вы пишите только / - то переадресация только из корня, а предыдущие условия еще и такую переадресацию запрещают.

  Ответить  
 
 автор: kb_nn   (23.04.2012 в 14:49)   письмо автору
 
   для: cheops   (23.04.2012 в 14:20)
 

странно. теперь у меня Internal Server Error., и со слешем одним тоже.
вроде до этого было перенаправление, но во всех случаях :(

всё равно спасибо :)
теперь хоть буду знать, что мыслю в нужном направлении.
а то вообще не был уверен, то ли делаю..

или у меня RedirectMatch работал?, да только неправильно..

теперь вообще при записи
RewriteEngine on
возникает ошибка..
еще ошибку нашел - должно быть [OR]

  Ответить  
 
 автор: Sfinks   (24.04.2012 в 12:46)   письмо автору
 
   для: kb_nn   (23.04.2012 в 12:04)
 

1. Как это у вас слеш стоит до знака "начало строки" (зачеркнутое)?
RewriteCond %{SCRIPT_FILENAME} /^[^(cat1)]

2. Ваши 2 первых RewriteCond не сработают по логике ИЛИ никогда. Сами прочитайте их: SCRIPT_FILENAME - не каталог cat1 или не каталог cat2. Т.е. условие выполняется всегда, т.к. даже если каталог - cat1, то он все-равно не cat2, т.е. всегда TRUE.

3. SCRIPT_NAME -это имя, которое уже прошло обработку предыдущими правилами. Вам нужно использовать REQUEST_URI

4. То, что сказал cheops

5. У вас не верный синтаксис отрицания. В РВ мод_реврайта символ ^ в [ ] не означает отрицание. Нужно использовать ! перед всей строкой.

6. Для редиректа на другой сайт нужно использовать внешнюю переадресацию: R=301

Учитывая все это получаем:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(cat1|cat2)
RewriteRule ^(.*)$ http://newsite.ru/$1 [R=301,L]
Здесь $1 - если на новом сайте нужно сохранить запрошенный путь. Если нет - уберите.

  Ответить  
 
 автор: kb_nn   (24.04.2012 в 14:17)   письмо автору
 
   для: Sfinks   (24.04.2012 в 12:46)
 

низкий вам поклон.
только как я понял у меня еще проблемы с mod_rewrite
вроде в списке загруженных отображается, а RewriteEngine on выдает ошибку Internal Server Error.
всё-таки мир не без добрых людей.

  Ответить  
 
 автор: cheops   (24.04.2012 в 14:22)   письмо автору
 
   для: kb_nn   (24.04.2012 в 14:17)
 

>вроде в списке загруженных отображается, а RewriteEngine on выдает ошибку Internal Server Error.
А у вас mod_rewrite подключен на уровне httpd.conf? Вы локально работаете или на сервере?

  Ответить  
 
 автор: kb_nn   (24.04.2012 в 14:33)   письмо автору
 
   для: cheops   (24.04.2012 в 14:22)
 

нет, я не так выразился., а честнее- наврал.
load есть, а он не загружается, хоть и по указанному пути лежит.
через httpd.conf, локально.
а на сервере (модуль там загружен, в phpinfo его видно) эта строка выдает ошибку - Access Forbidden.

  Ответить  
 
 автор: kb_nn   (25.04.2012 в 09:30)   письмо автору
 
   для: kb_nn   (24.04.2012 в 14:33)
 

проблема с mod_rewrite на локальном сервере решилась - у меня было два файла httpd.conf
всем спасибо за помощь и терпение :)
но проблема с переадресацей осталась.

в следующем случае портятся абсолютные пути к файлам со стилями и проч. для указанных каталогов

RewriteCond %{REQUEST_URI} !/^(.*?)/cat1
RewriteCond %{REQUEST_URI} !/^(.*?)/cat2
RewriteRule ^(.*)$ http://newsite.ru/ [R=301,L]

хотя сама переадресация работает только в нужных случаях.

  Ответить  
 
 автор: Sfinks   (25.04.2012 в 12:32)   письмо автору
 
   для: kb_nn   (25.04.2012 в 09:30)
 

Добавьте еще такое ограничение
RewriteCond %{REQUEST_URI} ^(.*)(?<!js|css|gif|png|jpg|jpeg)$

  Ответить  
 
 автор: kb_nn   (25.04.2012 в 13:53)   письмо автору
 
   для: Sfinks   (25.04.2012 в 12:32)
 

слушайте! вот спасибо :) кажется помогло :)
только теперь я не понимаю, что оно означает

  Ответить  
 
 автор: Sfinks   (25.04.2012 в 21:42)   письмо автору
 
   для: kb_nn   (25.04.2012 в 13:53)
 

Не редиректить запросы заканчивающиеся на js, css, gif, png, jpg, jpeg.

  Ответить  
 
 автор: kb_nn   (26.04.2012 в 21:39)   письмо автору
 
   для: Sfinks   (25.04.2012 в 21:42)
 

а что означает "<"?

  Ответить  
 
 автор: Sfinks   (26.04.2012 в 23:11)   письмо автору
 
   для: kb_nn   (26.04.2012 в 21:39)
 

?<! - отрицательный просмотр назад. Т.е. перед концом строки $ не должно быть js|css|gif|png|jpg|jpeg.
В данном случае можно было написать и проще:
RewriteCond %{REQUEST_URI} !(js|css|gif|png|jpg|jpeg)$
просто то у меня готовое было, но использовалось немного в другом контексте.

  Ответить  
 
 автор: Sfinks   (25.04.2012 в 12:34)   письмо автору
 
   для: kb_nn   (25.04.2012 в 09:30)
 

Может я что-то не понимаю. Можете объяснить кажый символ в строке
!/^(.*?)/cat1
и что это значит в целом? Это по идее не должно работать.

  Ответить  
 
 автор: kb_nn   (25.04.2012 в 13:42)   письмо автору
 
   для: Sfinks   (25.04.2012 в 12:34)
 

тут только первый слэш лишний, это я уже экспериментировал.
(.*?)/ до первого слеша в адресе.
в целом не cat1 в корневом каталоге сайта.

меня сейчас осенило - первый слеш ведь идет в http:// . но нет. не помогло и это.

  Ответить  
 
 автор: Sfinks   (25.04.2012 в 21:44)   письмо автору
 
   для: kb_nn   (25.04.2012 в 13:42)
 

Не очень понимаю проблему, но пятой точкой чую что вам после RewriteEngine On нужно прописать
RewriteBase /
и указывать пути не откуда-то там издалека, откуда вы указываете, а от корня сайта.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования