Apache request_uri в рамках VirtualHost

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

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

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

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

2
задан 14 September 2017 в 03:25
1 ответ

Я думаю, у вас, вероятно, конфликт с 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 - что немного эффективнее и избавляет вас от директивы.

0
ответ дан 3 December 2019 в 14:09

Теги

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