Используйте mod_rewrite для создания пользовательского индекса каталога в Apache

Итак, список каталогов Apache по умолчанию отстой, а параметры настройки mod_autoindex - отстой, поэтому я решил, что могу написать некоторые правила перезаписи в корне моего сервера, чтобы перенаправить любые запросы в каталог:

<IfModule rewrite_module>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} -d
    RewriteRule .* /index.php?dir=$0
</IfModule>

Теперь у меня создается впечатление, что это работает хотя бы немного, как отключение indexes все еще уходит localhost доступный (он отображает index.php), однако он, похоже, не достигает подкаталогов (которые либо возвращаются к индексам каталогов Apache, если indexes вариант включен, или дать 403 если они выключены).

У меня вопрос: могу ли я заставить это правило применяться глобально или мой поиск красивых индексов каталогов обречен на провал?

Изменить: я должен отметить: вышеуказанные правила содержатся в .htaccess в корне сервера.

Изменить: в идеале решение, если оно существует, все равно будет иметь DirectoryIndex функциональность (то есть index.php и т.д. будет отображаться, если он существует),

1 ответ

Решение

-d Проверка каталога работает только с абсолютными путями файловой системы. Так что либо укажите абсолютный путь к файловой системе (например, используя %{DOCUMENT_ROOT}%{REQUEST_URI} или же %{REQUEST_FILENAME} напрямую) или использовать -D это делает дополнительный подзапрос для разрешения пути URI к пути файловой системы. Я бы предпочел:

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* /index.php?dir=$0
Другие вопросы по тегам