Apache DirectorySlash Прочь - повреждения Сайта

Если я установил DirectorySlash Off в моем .htaccess файл и вызов каталог без запаздывающей наклонной черты я добираюсь 403-Forbidden с моего сервера. Если я называю его с наклонной чертой, все хорошо работает.

Кто-либо мог объяснить почему? Вот мой полностью анонимизирован .htaccess:

# GLOBAL CONFIG
Options +FollowSymlinks
DirectorySlash Off
AddDefaultCharset utf-8
php_value post_max_size 256M
php_value upload_max_filesize 256M

# BEGIN WordPress
RewriteEngine On
RewriteBase /folder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
# END WordPress

# REMOVE WWW
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com$1 [R=301,L]
7
задан gearsdigital 15 July 2010 в 18:51
поделиться

2 ответа

Как вы знаете из документации, когда DirectorySlash установлен на Выкл. , запросы к / папке не оцениваются DirectoryIndex . Это означает, что запрос не будет автоматически сопоставлен с /folder/index.php .

mod_dir выполняет эту проверку на этапе «исправления» обработки запроса. mod_rewrite , отвечающий за ваши определения RewriteRule , также выполняет свою обработку на этом этапе, когда вы указываете правила в файле .htaccess .

Однако он был запрограммирован с учетом таких модулей, как mod_dir , и включает проверку, чтобы убедиться, что текущий каталог был запрошен с завершающей косой чертой. В противном случае он отказывается обрабатывать запрос, поскольку это может привести к неопределенному поведению.

Затем запрос переходит к фазе генерации контента, которая, поскольку запрос не был отображен в реальный файл, обрабатывается mod_autoindex . Учитывая, что индексы отключены на вашем хосте по умолчанию, mod_autoindex возвращает 403 Forbidden , что вы видите.

Обратите внимание, что, поскольку DirectoryIndex не оценивается, даже если mod_rewrite были для обработки запроса, он все равно завершится ошибкой, потому что нет автоматического разрешения индекса .php , и ваше правило

RewriteRule . /folder/index.php [L]

не будет соответствовать, потому что . требует сопоставления чего-либо (но запрос будет пустым).

Включение DirectorySlash предотвращает этот сценарий, исправляя предотвращенные действия во всех ранее упомянутых сценариях, кроме последнего примечания, о котором позаботился тот факт, что DirectoryIndex отображает запрос в любом случае на index.php .

13
ответ дан 6 December 2019 в 07:49
поделиться

Я думаю, потому что, когда вы выключаете DirectorySlash, он отключает автокоррекцию URL-адреса и пытается показать список каталогов, но, к счастью, вы, вероятно, отключили это где-то (или в правах доступа к файлам), поэтому он отправляет 403-Forbidden. Я предполагаю, что при включении нормально работает. Насколько я понимаю из документации, отключать DirectorySlash для безопасности не очень хорошо. http://httpd.apache.org/docs/2.1/mod/mod_dir.html

2
ответ дан 6 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: