RewriteCond для пропуска актуальных каталогов, похоже, игнорируется - PullRequest
0 голосов
/ 09 февраля 2012

Моя проблема в том, что RewriteRule все еще совпадает, когда я посещаю физический каталог, например http://a-domain.com/foo/ где foo - это обычный каталог в корневом веб-каталоге.

файл .htaccess имеет:

Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .? index.php [L]

Отлично работает на моем сервере dev, но не на живом сервере WHM / CPanel. Я немного растерялся.

Ответы [ 3 ]

0 голосов
/ 09 февраля 2012

Я пробовал это на виртуальной машине, которая отражает мою собственную общую службу , и она прекрасно работает для меня.У вас есть еще один .htaccess в каталоге foo?Если так, то механизм перезаписи будет игнорировать ваш в DOCROOT и использовать его вместо этого?

0 голосов
/ 23 февраля 2012

Директория /foo/ имеет базовую аутентификацию, поэтому она не работала, когда %{REQUEST_FILENAME} содержал несуществующий файл /home/the_user/public_html/401.shtml.Я не думал, что это проблема, потому что базовая аутентификация работала, и когда я отменил запрос на аутентификацию, мне обслуживали стандартный файл 401.Обычно, когда эти файлы ErrorDocument отсутствуют, Apache сообщает Кроме того, возникла ошибка типа 404 при попытке использовать ErrorDocument для обработки запроса.

0 голосов
/ 09 февраля 2012

Я проверил это на своем сайте cpanel, и вы правы, и я выяснил, в чем проблема.когда вы пытаетесь получить доступ к папке на вашем веб-сайте, у которой нет файла (индекса) по умолчанию, он пытается получить доступ к файлу, который отвечает за код HTTP 403, а поскольку он не существует, он переписывает URL-адрес на index.php.

Все, что вам нужно сделать, это добавить это к вашему файлу .htaccess выше:

ErrorDocument 403 /index.php?type=err&code=403
...