RewriteRule, проверяющий файл в переписанный путь к файлу, существует

«Использование MyNamespace» работает в RTM MVC3. Надеюсь, это поможет.

14
задан Pim Jager 22 January 2009 в 21:36
поделиться

2 ответа

RewriteRule ^pages/([^/\.]+) cache/pages/$1.html [NC,QSA]

# At this point, we would have already re-written pages/4 to cache/pages/4.html
RewriteCond %{REQUEST_FILENAME} !-f

# If the above RewriteCond succeeded, we don't have a cache, so rewrite to 
# the pages.php URI, otherwise we fall off the end and go with the
# cache/pages/4.html
RewriteRule ^cache/pages/([^/\.]+).html pages.php?p=$1 [NC,QSA,L]

Выключение MultiViews крайне важно (если Вам включили их), также.

Options -MultiViews

Иначе начальный запрос (/pages/...) будет автоматически преобразован в/pages.php, прежде чем mod_rewrite умрет. Можно также просто переименовать pages.php к чему-то еще (и обновить последнее, переписывают правило также) избегать конфликта MultiViews.

Редактирование: Я первоначально включал RewriteCond ... !-d, но это является посторонним.

17
ответ дан 1 December 2019 в 12:27
поделиться

Другой подход должен был бы сначала посмотреть, если существует chached доступное представление:

RewriteCond %{DOCUMENT_ROOT}/cache/$0 -f
RewriteRule ^pages/[^/\.]+$ cache/$0.html [L,QSA]

RewriteRule ^pages/([^/\.]+)$ pages.php?p=$1 [L,QSA]
6
ответ дан 1 December 2019 в 12:27
поделиться
Другие вопросы по тегам:

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