Как заставить Apache просто перенаправить пользователя и игнорировать структуру каталогов? - PullRequest
1 голос
/ 16 октября 2010

Хорошо, эта проблема возникла недавно, и я не знаю, почему это происходит;на самом деле это две проблемы в одном ...

0.Мой файл .htaccess, для справки.(Отредактировано)

Options -Indexes +FollowSymLinks
RewriteEngine On
RewriteBase /

ErrorDocument 400 /index.php?400
ErrorDocument 401 /index.php?401
ErrorDocument 403 /index.php?403
ErrorDocument 404 /index.php?404
ErrorDocument 410 /index.php?410
ErrorDocument 414 /index.php?414
ErrorDocument 500 /global/500.php

RewriteCond %{HTTP_HOST} !^$ [NC]
RewriteRule .* index.php [L]

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(.*\.)?(animuson)\.(biz|com|info|me|net|org|us|ws)/.*$ [NC]
RewriteRule ^.*$ - [F]

1.Моя папка с картинками идет по жесткому пути вместо перенаправления.

Я понятия не имею, ПОЧЕМУ это делает.Это действительно беспокоит меня.Папка 'pictures' - это символическая ссылка на другое место, так что я могу легко загружать файлы в эту папку без необходимости поиска по папкам и так далее через мою учетную запись FTP, но это единственное, для чего я его использую.Однако, когда я захожу на http://example.com/pictures, мой htaccess видит его как доступ к другой папке, которая ограничена, и выдает ошибку 403, а не перенаправляет на index.php и отображает страницу как обычно.

Я подумал, что это как-то связано с тем, что эта конкретная папка является символической ссылкой, что приводит к странным действиям, но я решил, что мои правила вообще не применяются к папкам.Если я захожу в такие папки, как «css» и «com», которые являются папками в корневом веб-каталоге, то отображается страница с ошибкой 404 и добавляется символ «/» в конец URL-адреса, поскольку он обрабатывается как каталог.Это также делает ту же ошибку 403 для моего каталога 'images', который настроен таким же образом.

Итак, вопрос здесь в том, как мне изменить мой RewriteRule, чтобы он применялся и к каталогам?Я хочу, чтобы все данные, доступные через Интернет, были перенаправлены обратно на index.php при сохранении полного пути доступа в адресной строке. Почему это не работает?(Я почти уверен, что раньше он работал нормально.)

Вот небольшая диаграмма, показывающая пути, по которым они следуют ...

example.com/pictures  -> pictures/ -> /home/animuson/animuson-pictures -> 403
example.com/com       -> com/      -> 404
example.com/test      -> index.php
example.com/          -> index.php
example.com/images    -> images/   -> /home/animuson/animuson-images   -> 403
example.com/css       -> css/      -> 404

РЕДАКТИРОВАТЬ: Следующая информациядобавлено.
Apache сначала обрабатывает структуру каталога.Он определяет, существует ли путь на основе того, что было введено в адресную строку.Если кто-то введет имя папки, которая, как оказалось, существует, он перенаправит пользователя на путь с символом «/» в конце URL-адреса, означающего, что это каталог.Для каталога «картинки», описанного выше, пользователь не имеет разрешения на доступ к этой папке, поэтому он перенаправляет их на страницу 403 «Отказано в доступе», а не просто показывает страницу, которая предполагается для отображения там черезRewriteRule выше.Мой самый большой вопрос: почему Apache обрабатывает каталог сначала и , как мне заставить его перестать делать это ?Мне бы очень хотелось получить ответ на этот вопрос.

2.Почему мое сжатие не работает?(РЕДАКТИРОВАТЬ: Эта часть исправлена.)

При анализе моего сайта с помощью веб-оптимизатора постоянно повторяется, что на моей странице не используется веб-сжатие, но я почти на 100% уверен, что до этого он работал нормальнопод теми же настройками.Кто-нибудь может предложить какие-либо причины, по которым он может не работать с этим набором, или предложить лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Где находится этот файл .htaccess?В корневом каталоге или в каталоге рисунков?

1) Вы используете Options -Indexes, что запретит доступ к спискам каталогов.Это обрабатывается /index.php?403, который, в свою очередь, будет перенаправлять в / 403.(Я подтвердил это, перейдя в /index.php?403 вручную). Я не вижу никаких других правил в опубликованном .htaccess, которые могли бы повлиять на это.Так что это может произойти, потому что index.php или другой файл .htaccess или правило сервера делает это перенаправление.

Возможно, вы также захотите проверить права доступа к файлу UNIX для рассматриваемого каталога.

2) Согласно этому аптимизатору, сжатие http://www.websiteoptimization.com/services/analyze/, действительно включено для файлов html, js и css, как указано в правилах.Я держу пари, что оптимизатор глуп и делает одну из следующих трех вещей:

1)) Жалуется на то, что изображения не сжимаются.(Обычно плохая идея сжимать изображения, потому что они, как правило, уже сжаты, а дополнительная загрузка ЦП, как правило, не стоит, так как чистый выигрыш очень мал. Так что ваши правила в этом отношении нормальны.)

2)) Может показаться, что DEFLATE не считается сжатием и хочет, чтобы вы использовали GZip.

3)) Может также реагировать на включенный извне файл StatCounter js, который не сжимается.(И с этим мало что можно поделать.)

0 голосов
/ 23 мая 2011

Через некоторое время размышления о IRC-канале Apache я наконец-то смог выяснить реальные причины этого на счастливой случайности. Я просто случайно посмотрел на структуру каталогов, используя ls -l, и заметил, что все символические ссылки каким-то образом изменили свои разрешения на animuson:animuson с root:root оригинала. Я попытался запустить простой chown root:root для них, но это не имело никакого эффекта, поэтому я удалил их все и воссоздал, и проблема исчезла. Я действительно не имею ни малейшего представления, почему разрешения изменились в этом сценарии, но решение сработало, и теперь все в порядке. Я также добавил DirectorySlash Off в свой файл .htaccess, чтобы избавиться от косых черт после существующих папок, просто чтобы он выглядел намного приятнее.

...