Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Еще раз о mod_rewrite

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Уважаемые господа, разрешите побеспокоить вас вопросом о mod_rewrite. Изучила все имеющиеся темы, но поняла, что самой уже не справиться.  
У меня есть такое вот правило в .htaccess
 
RewriteBase /
RewriteEngine On
 
RewriteCond %{REQUEST_URI} !\/(.*).php
RewriteCond %{REQUEST_URI} !\.(jpg|gif|png|css|zip|doc)$
RewriteRule ^index.html$  index.php
RewriteRule ^/(.*)/$  $1.php [L]
 
На домашнем компе (Денвер) и на старом хостинге (Вальюхост) все работает отлично.  
Выкладываю сайт заказчику на хостинг (Арбатек). Не работает.  
 
Привожу последнее правило к виду  
 
RewriteRule ^(.*)/  $1.php [L]
 
В этом случае - работает. Но начинает пытаться искать скрипты images.php и styles.php (это названия директорий, где лежат картинки и таблицы стилей) в случае обращения к картинкам и css.  
То есть, выясняется, что не работает второе условие RewriteCond. Первое условие работает, то есть, если обращаюсь к .php сценарию, расположенному в поддиректории, редирект не идет.
Второе условие пробовала и в таком виде:
 
RewriteCond %{REQUEST_URI} !\/(.*).(jpg|gif|png|css|zip|doc)
 
И с разными вариациями с ^ в начале и с $ в конце, убирала слэши, писала уже абсолютный путь до картинки - все равно редиректит.  
Я уже, конечно, запарилась, и могу не видеть очевидного. Помогите, пожалуйста.  
 
Почему редирект происходит там, где не должен?

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 21:15 28-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alina Sob

Цитата:
Почему редирект происходит там, где не должен?

включаем логи и смотрим, что происходит.

Цитата:
На домашнем компе (Денвер) и на старом хостинге (Вальюхост) все работает отлично.  
Выкладываю сайт заказчику на хостинг (Арбатек). Не работает.

версии, плиз.. номера версий апачей

Цитата:
В этом случае - работает. Но начинает пытаться искать скрипты images.php и styles.php (это названия директорий, где лежат картинки и таблицы стилей) в случае обращения к картинкам и css.  

ясен пень, regexp берет все, что будет до /, даже если после нее что то и есть. Для этого и пишут $.
Короче - включаем логирование и смотрим, как преобразуется.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:56 28-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я ж писала выше, как преобразуется....  
[имя_хоста]/images/1.jpg  
преобразуется в [имя_хоста]/images.php
 
Дома - Денвер с Apache/1.3.27 (Win32)  
 
Вальюхост - FreeBSD с Apache/1.3.33  
 
Арбатек - Linux Vanessa , Apache 1.3.33

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 00:36 29-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alina Sob

Цитата:
Я ж писала выше, как преобразуется....  

и я, кажется, объяснил причину.
еще раз - включаем логи реврайта и смотрим, что не работает в том случае, когда нужно.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:56 29-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
RewriteLog not allowed here
 
Из error-log'а..

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 01:09 29-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
RewriteCond %{REQUEST_URI} !\.(jpg|gif|png|css|zip|doc)$  

RewriteCond  %{REQUEST_URI} !.*\.(gif|jpe?g|png|css|zip|doc)$
так?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:16 29-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нет, не работает.

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 01:34 29-01-2005
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alina Sob

Цитата:
RewriteRule ^index.html$  index.php  

 
Это на самый верх, и поставить [L]
 
Все остальное переделать так.
 

Код:
 
RewriteCond %{REQUEST_URI} !\.(jpg|gif|png|css|zip|doc|php)$
RewriteRule ^/(.*)/  $1.php [L]
 

 
Попробовать, сообщить результат.
 
 
Хорошо бы логи посмотреть, попросите хостера включить их.

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 03:16 29-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
batva
Спасибо.
Нет, не работает.
 
если убрать слэш (что, естественно, неправильно)
RewriteRule ^(.*)/  $1.php [L]  
начинают работать ссылки вида
[имя_хоста]/services/info.html
зато следующее вложение уже не работает. Это и понятно.  
 
В общем, поняла, прошу хостера включить логи.
 
 
Добавлено:
Цитата из письма саппорта.

Цитата:
 
К сожалению, включить логирование mod_rewrite, невозможно.  
Mod_rewrite у нас работает корректно.
 

 
Может, проблема в различии операционных систем? Вернее, версий регулярных выражений?

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 15:08 29-01-2005
Nvc

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alina Sob
Лучше сменить хостера, т.к. (судя с ответа) скорее всего администраторы там некомпетентные.

Всего записей: 235 | Зарегистр. 01-08-2004 | Отправлено: 19:13 29-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ставила эксперименты.  
Пробовала поставить самым первым (после  
RewriteBase /  
RewriteEngine On )
строку
 
RewriteRule ^company.html$  company.php  
 
Не работает. Есть подозрение, что дело вообще не в регулярном выражении.  
 
В чем же может быть? В какую сторону копать, что искать?  
У хостера "нет сейчас специалиста, который бы мог помочь".  
 
Да, и еще RewriteBase - каталога www - alias для public_html.  
RewriteBase пробовала ставить и / , и /public_html

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 19:28 29-01-2005
woffer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alina Sob
Солидарен с Nvc

Цитата:
У хостера "нет сейчас специалиста, который бы мог помочь".  

повод сменить хостера, посоветуйте это клиенту.
 
а в error.log все нормально ?
 
 

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 19:49 29-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Они только что год хостинга проплатили. По-моему, у Арбатека был money-back...
Но мне кажется, что можно это как-то настроить. Не может быть, чтобы никто из клиентов Арбатека не использовал mod_rewrite.  
 
В error.log -  
404 - File does not exist: /public_html/company.html

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 19:54 29-01-2005
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alina Sob

Цитата:
Да, и еще RewriteBase - каталога www - alias для public_html.  
RewriteBase пробовала ставить и / , и /public_html

 
Без  RewriteBase попробуйте.
 
И настаивайте на включении вам логов для mod_rewrite.
Объясните ситуацию, что кругом это работает, а у вас нет, чтобы разобраться и исправить ситуацию, нужны логи.
Это им не трудно, всего пару директив прописать в вашем виртуальном хосте.
 
 
 
 
 

Цитата:
Да, и еще RewriteBase - каталога www - alias для public_html.  
RewriteBase пробовала ставить и / , и /public_html

бррр..
физически на сервере папка как называется?
public_html или www ?
 

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 20:08 29-01-2005
Nvc

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alina Sob
Попробуйте на другом сервере. Напр., могу дать акаунт у себя (если нужно - пишите в ПМ).
Если заработает - тогда проблема явно в хостинге, если же нет - по логах посмотрите.

Всего записей: 235 | Зарегистр. 01-08-2004 | Отправлено: 20:09 29-01-2005 | Исправлено: Nvc, 20:11 29-01-2005
woffer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alina Sob
 

Код:
 
RewriteBase /  
RewriteEngine On  
RewriteRule ^company.html$  company.php
 

 
это весь .htaccess ?  
 
 
Добавлено:
batva

Цитата:
физически на сервере папка как называется?  

 
да какая разница какая папка ? / - DocumentRoot

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 20:10 29-01-2005 | Исправлено: woffer, 20:14 29-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
batva
Без RewriteBase - то же. Не работает.
 
С public_html - это я ступила. DocumentRoot - как раз на public_html указывает.  
Так что я не права была в этом вопросе.  
 
Nvc
Спасибо, я пробовала на Вальюхосте - работает.
 
woffer

Код:
 
RewriteBase /    
RewriteEngine On  
RewriteRule ^company.html$  company.php  

 
Для чистоты эксперимента - это был весь .htaccess.

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 21:01 29-01-2005
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
woffer
разница была бы, если бы действительно был алиас.
В RewriteBase нужно было бы этот алиас указать.
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteBase
 
 
Alina Sob
RewriteBase по идее нужно писать после RewriteEngine On, хотя вряд ли вам это поможет, но все таки.
 
 
 

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 21:22 29-01-2005
woffer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
batva

Цитата:
разница была бы, если бы действительно был алиас.  
В RewriteBase нужно было бы этот алиас указать.  
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteBase  

опс, не знал, tnx
 
Alina Sob

Цитата:
Для чистоты эксперимента - это был весь .htaccess.

имхо, тогда нужно наезжать на хостера.  

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 01:28 30-01-2005
Alina Sob



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В общем и целом, заработало в таком варианте:
RewriteRule ^([a-z_]+)?/  /$1.php [L,NC]  
 
Понимаю, что a-z с _ накладывает сильные ограничения. \w как-то не так воспринималось.
Корректно обрабатываются субдиректории, что уже достижение.
 
Но опять теперь редиректятся все запросы к картинкам, css и проч.  
RewriteCond %{REQUEST_URI} !\.(jpg|gif|png|css|zip|doc|php|js)$  
Что здесь может быть не так?
 
Хостер настаивает, что только для меня он не может включить логи реврайта. Жду сисадмина, которому, якобы, переправлен мой запрос, и который мне поможет.

Всего записей: 44 | Зарегистр. 08-11-2004 | Отправлено: 14:47 31-01-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Еще раз о mod_rewrite


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru