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