mod_rewrite: перенос из conf в .htaccess

deonis

Новичок
mod_rewrite: перенос из conf в .htaccess

Переносим сайт с личного хостинга к хостер-провайдеру

Раньше стояло в апачевском сonf-файле настройки:

RewriteEngine On
RewriteRule ^/error.html$ - [L]
RewriteRule ^/admin/(.*) /adm/$1 [R,L]
RewriteRule ^/adm$ /adm/
RewriteRule ^/adm/(img|files)/(.*) /adm/$1/$2 [L]
RewriteRule ^/adm/.* /adm/page.php [L]
RewriteRule ^/(dyn|user)/(.*) - [L]
RewriteRule ^/(img|css|js)/(.*) /static/$1/$2 [L]
RewriteRule ^/.* /page.php [L]

простой перенос в .htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^error.html$ - [L]
RewriteRule ^admin/(.*) adm/$1 [R,L]
RewriteRule ^adm$ adm/
RewriteRule ^adm/(img|files)/(.*) adm/$1/$2 [L]
RewriteRule ^adm/.* adm/page.php [L]
RewriteRule ^(dyn|user)/(.*) - [L]
RewriteRule ^(img|css|js)/(.*) static/$1/$2 [L]
RewriteRule ^.* page.php [L]

толка никакого не дал. Перенаправление работает как-то странно, такое чувство, что после
RewriteRule ^admin/(.*) adm/$1 [R,L]
инструкции не воспринимаются вплоть до последней, лишь которая на page.php перенаправляет все запросы.

Подскажите, пожалуйста, в чем может быть трабл, так как с mod_rewrite не сильно дружу ...

P.S. Еще подсказали сделать так:

RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteRule ^error.html$ - [L]
RewriteRule ^admin/(.*) adm/$1 [R,L]
RewriteRule ^adm$ adm/
RewriteRule ^adm/(img|files)/(.*) adm/$1/$2 [L]
RewriteRule ^adm/.* adm/page.php [L]
RewriteRule ^(dyn|user)/(.*) - [L]
RewriteRule ^(img|css|js)/(.*) static/$1/$2 [L]
RewriteRule ^.* page.php [L]

Помогло это в том плане, что хоть изображения и css стали подхватываться ...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
инструкции не воспринимаются вплоть до последней, лишь которая на page.php перенаправляет все запросы.
Объясни что ты запрашиваешь в адресной сроке и что ожидаешь получить.
Желательно 1-2 предложениями
 

deonis

Новичок
чорд ... а сейчас все работает ...
ничего не пойму ...

Mr_Max, прошу прощение за беспокойство

-~{}~ 01.12.08 11:14:

таки проблемы продолжаются ...

запрашиваю папку admin или adm, в ней есть свои настройки через .htaccess и .htpasswd файл с требованием авторизироваться.

Но, как я понял, конструкция
RewriteCond %{ENV:REDIRECT_STATUS} 200

каким-то образом обрубает 401-запрос на авторизацию или что-то в этом духе.
В общем запрос на аризацию в браузере не появляется.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
При отключенном реврайте, в корневой директории, запрос на авторизацию есть?
 

deonis

Новичок
Автор оригинала: Mr_Max
При отключенном реврайте, в корневой директории, запрос на авторизацию есть?
да

-~{}~ 01.12.08 12:47:

сейчас чокнусь ....

начал тестировать на более простых mod_rewrite правилах

локально, 401 авторизация забивает mod_rewrite (то есть если в папке есть запрос на 401 авторизацию, то почему-то apache передает этой папке управление, а mod_rewrite для нее не срабаывает, если такой авторизации нет, то передет управление корневому php файлу, указанному в htaccess)

А на сервере, если не ошибаюсь, с точностью до наоборот ...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
У меня при запросах
http://sitename/adm
http://sitename/adm/
http://sitename/admin/
Единственно не рабочее правило (ввиду отсутсвия слеша) для
http://sitename/admin

Твои правила работают.

sitename/.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteRule ^error.html$ - [L]
RewriteRule ^admin/(.*) adm/$1 [R,L] <-------
RewriteRule ^adm$ adm/
RewriteRule ^adm/(img|files)/(.*) adm/$1/$2 [L]
RewriteRule ^adm/.* adm/page.php [L]
RewriteRule ^(dyn|user)/(.*) - [L]
RewriteRule ^(img|css|js)/(.*) static/$1/$2 [L]
RewriteRule ^.* page.php [L]

sitename/adm/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /path/to/htpwd/.htpasswd
Require valid-user

Lаже не знаю что тебе посоветовать в данной ситуации.
Методом тыка убирай правила из корневой директории.
 

deonis

Новичок
Занятие "сексом" привело к переписыванию корневого htaccess файла на

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule !^(adm|img|css|js|dyn|user|error) page.php

а в папке adm на

AuthType Basic
AuthUserFile "/home/site/.htpasswds/public_html/adm/passwd"
require valid-user
AuthName "Protected public_html/adm"

В результате толи mod_rewrite перехватывает доступ к adm, толи выдается ошибка 403 или 404, но управление передается к page.php в корне сайта.
Если закоментить строчку "require valid-user"

то управление передается к корневому файлу в папке adm, естественно авторизация не запрашивается.

P.S. какой-то конфликт получается между mod_rewrite и htaccess-авторизацией

-~{}~ 03.12.08 17:04:

Проблема конфлита mod_rewrite через htaccess-файл в корне сайта и авторизацией через htaccess-файл в подпапке пока не выяснена, но была найдена статья http://xpoint.ru/forums/internet/webservers/apache/thread/37517.xhtml, где описывается схожая проблема.

Бодания с хостером, увы, пока не увенчались успехом, так как хостер не в курсе с чем связана проблема.
Может кто-то еще сможет подсказать какие-нибудь пути решения?
 

alpha

Новичок
включи логирование обработки rewrite, там очень часто видно где завтык :(
у меня была схожая проблема, почему-то именно на определенном сервере при запросе на авторизацию искался 401.shtml. помогло:
ErrorDocument 401 /er401.php
er401.php: <?php;?>
 
Сверху