Apache DirectorySlash вне сайта перерывы

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

может кто-нибудь объяснить, почему? Вот мои полностью анонимные .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 [R=301,L]

3 ответов


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

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

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

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

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

RewriteRule . /folder/index.php [L]

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

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


С Apache 2.4 вы можете разрешить перезапись .htaccess файлы, установив RewriteOptions AllowNoSlash.

 Changes with Apache 2.3.16
 ...
 *) mod_rewrite: Add the AllowNoSlash RewriteOption, which makes it possible
    for RewriteRules to be placed in .htaccess files that match the directory
    with no trailing slash. PR 48304.
    [Matthew Byng-Maddick <matthew byng-maddick bbc.co.uk>]
 ...

посмотреть Apache документация mod_rewrite


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