Apache DirectorySlash, похоже, не работает - PullRequest
1 голос
/ 20 января 2012

У меня проблемы с сайтом, который я пытаюсь развернуть. На моем хосте разработки сайт работает нормально, но при развертывании происходит сбой. Оба хоста имеют очень похожую конфигурацию, оба являются дистрибутивами Ubuntu Linux (dev: 11.10, deploy: 10.04), оба используют apache2 и т. Д.

На обоих сайтах включен mod_dir, но в развертывании, похоже, не добавляется косая черта к именам каталогов, в то время как в разработке это делается. Итак, когда я ввожу этот URL (убрал http, чтобы избежать глупой фильтрации против спама stackoverflow):

devel.mydomain.com / админ

Хост разработки перенаправляет его на:

devel.mydomain.com / админ /

При развертывании http://mydomain.com/admin не перенаправляется на mydomain.com/admin/ по неизвестным причинам, и я заканчиваю с ошибкой 404. Конечно, если я введу mydomain.com/admin/, добавив косую черту вручную, он будет работать как положено. Но я бы предпочел перенаправить также mydomain.com/admin на mydomain.com/admin/

Вопрос в том, ПОЧЕМУ в devel mod_dir, кажется, выполняет перенаправление, а при развертывании - нет.

Я сделал grep в файлах конфигурации, чтобы посмотреть, была ли где-то отключена директива DirectorySlash, и ничего не нашел. Он не включен явно на devel, поэтому я думаю, что он должен быть включен по умолчанию. В любом случае я добавляю это в мой файл .htaccess на хосте развертывания:

DirectorySlash на

Но это тоже не сработало.

Есть подсказки?

1 Ответ

0 голосов
/ 23 января 2012

Папка /admin защищена паролем.Я не думал, что это актуально, но на самом деле это так.

Также в моем файле .htaccess есть следующие правила:

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule .* index.php [L]
    </IfModule>

Проблема связана с this - см. здесь дляхорошее объяснение.

В основном, когда Apache генерирует ошибку 401, чтобы запросить у браузера пароль, он также генерирует другой запрос, который не использует ни одну папку, каталог или символическую ссылку, поэтому он перенаправляется на index.php.

Обходной путь - добавить это в файл .htaccess в корневой папке сайта:

ErrorDocument 401 /error/null.html
ErrorDocument 403 /error/null.html

и создать этот файл, например, так:

touch ./error/null.html

Это не лучшие практики , но пока они подойдут, пока я ищу лучшее решение.

...