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