Уровень каталога .htaccess mod_rewrite останавливает перезапись vhost - PullRequest
0 голосов
/ 03 августа 2011

Следующая директива в моем файле vhost отлично работает, если нет файла .htaccess.Но когда я представляю один, он перестает работать.Как заставить перезаписи vhost выполняться, когда перезапись htaccess равна not-matched?

С vhost.conf:

# Skip everything except html and json
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_URI} !\.(html|json)$
RewriteRule .* - [L]
# If html exists (is cached)
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
# Otherwise pass it on the index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

С /test/.htaccess:

RewriteEngine on
RewriteCond %{REQUEST_URI} old_directory/.*$
RewriteRule (.*)$ old_missing.phtml [PT]

Запросы на /test/hello.json ...... без .htaccess: направляется на index.php и возвращает правильный JSON.... с .htaccess: возвращает 404 Not Found

Запросы на /text/old_hello.phtml ...... без .htaccess: возвращает 404 Not Found... с .htaccess: возвращает содержимое old_missing.phtml

Кроме того, я замкнул свой журнал перезаписи и похоже, что он делает то, что должен с правилами .htaccess (trip per-dir prefix, applying pattern, RewriteCond => not-matched и pass through), но затем он просто останавливается.

Для тех, кто склонен спрашивать: «Зачем ты это делаешь?»Есть две причины: 1) мне платят, и 2) мы переносим некоторые запросы ajax .phtml в новую систему ajax .json, поэтому нам нужно вернуть сообщение, если пользователь запрашивает файлы из old_directoryсначала сообщить им об изменениях.Спасибо.

1 Ответ

1 голос
/ 03 августа 2011

Вам необходимо добавить следующую строку во ВСЕ ваши файлы .htaccess, в которых вы используете правила перезаписи:

RewriteOptions inherit

Документация Apache: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions

...