Неожиданное .htaccess относительное поведение ErrorDocument

КОТЕНОК является актуальным портом почтенной старой ШПАКЛЕВКИ. Это поддерживает снабженные вкладками сессии и набор других тонкостей/тонких настроек к исходной ШПАКЛЕВКЕ.

www.9bis.net/kitty

К сожалению, не многие люди знают об этом ветвлении все же. Если бы Вы в настоящее время используете ШПАКЛЕВКУ, я настоятельно рекомендовал бы КОТЕНКА.

1
задан 19 September 2012 в 19:53
1 ответ

Я думаю, что вы неправильно поняли относительный путь. Файлы

.htaccess не имеют какого-либо особого поведения, которое заставляет пути быть относительными; По сути, они аналогичны блоку с точки зрения поведения конфигурации.

ErrorDocument не имеет никакого понятия о контексте; когда вы вводите путь вроде /error.php , который всегда считается относящимся к корню документа, независимо от того, где он настроен. В конфигурации mod_rewrite в блоке или в файле .htaccess используются относительные пути, что, вероятно, и есть то, о чем вы думаете для такого поведения.

Пара вариантов, как вы могли бы это реализовать ... у вас может быть одна ошибка . php , который извлекает содержимое из файлов ошибок для каждого приложения в зависимости от пути запроса?

Или вы можете просто использовать mod_rewrite , чтобы получить желаемое поведение выбора страницы с ошибкой (чтобы логика соответствовала то, что вы ищете, представляет собой немного сложную путаницу):

<Directory /path/to/docroot>
    # First, we'll have a rule that will handle looking for an error.php in
    # the app directory that the request is in...
    # Not a file or a directory that exists:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # Capture the application directory that we're trying to load from (if
    # there is one) for use in the next rule:
    RewriteCond %{REQUEST_FILENAME} ^/path/to/docroot/([^/]+)/
    # Check if an error.php exists in that directory;
    RewriteCond /path/to/docroot/%1/error.php -f
    # Send the response to the error page.  It should set the 404 response code.
    RewriteRule ^([^/]+)/.*$ $1/error.php [L]

    # Ok, the previous pile of rules didn't apply;  if the user's requesting 
    # a nonexistent resource, then either the user's not in an app subdirectory,
    # or they're in a subdirectory that didn't have an error.php.
    # So, this is a lot simpler:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ error.php [L]
</Directory>
1
ответ дан 4 December 2019 в 00:58

Теги

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