«Использование MyNamespace» работает в RTM MVC3. Надеюсь, это поможет.
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
, но это является посторонним.
Другой подход должен был бы сначала посмотреть, если существует chached доступное представление:
RewriteCond %{DOCUMENT_ROOT}/cache/$0 -f
RewriteRule ^pages/[^/\.]+$ cache/$0.html [L,QSA]
RewriteRule ^pages/([^/\.]+)$ pages.php?p=$1 [L,QSA]