Назад | Перейти на главную страницу

Apache request_uri в рамках VirtualHost

Этот код отлично работает в .htaccess или в каталоге

RewriteEngine on
RewriteCond %{request_uri} !^/dir/$ [NC]
RewriteRule ^(.*)$ /dir/ [END]

но когда помещается в VirtualHost, он вызывает бесконечное перенаправление.

Я читал документацию о различиях между request_uri в области виртуального хоста и каталога, но я все еще не могу создать код, который будет работать в контексте виртуального хоста. Что я должен изменить?

Я думаю, у вас наверняка конфликт с mod_dir (и DiretcoryIndex). Хотя я удивлен, что это "отлично работает в .htaccess"(если у вас есть что-то еще, что предотвращает петлю)?

Если переписать в голый каталог, т.е. /dir/ тогда mod_dir вызовет внутренний подзапрос на /dir/index.php (или как там ваш DirectoryIndex установлен на), и это, скорее всего, вызовет бесконечный цикл (несмотря на то, что вы END флаг) с /dir/index.php Спички !^/dir/$.

Вы должны выполнять перезапись прямо в индексный документ, и это должно решить проблему. Например:

RewriteEngine on
RewriteRule !^/?dir/$ /dir/index.php [END]

Вам не нужен RewriteCond директива, которая проверяет REQUEST_URI, вы можете сделать ту же проверку в RewriteRule шаблон - что немного более эффективно и избавляет вас от директивы.