Это потребует настройки, так как ваше регулярное выражение не соответствует шаблону, который вы перечисляете (порядок меняется), но следующее основано на вашем примере URL:
RewriteCond %{DOCUMENT_ROOT}/cache/$1$2$3\.html -f
RewriteRule ^(\d+)(/\d+)(/[^/]+)$ /cache/$1$2$3.html [L]
Если вы хотите немного больше вложенности (папки, основанные на первой и второй цифрах идентификаторов, но игнорирующие остальную часть средней части URL), тогда это будет:
RewriteCond %{DOCUMENT_ROOT}/cache/$1$2/$3$4\.html -f
RewriteRule ^(\d+)(/\d)(\d)\d*(/[^/]+)$ /cache/$1$2/$3$4.html [L]
Сначала проверяется RewriteRule, чтобы увидеть, применяется ли правило.RewriteCond
затем проверяет, существует ли файл (DOCUMENT_ROOT
- корень сайта), используя записи из RewriteRule
.Если это существует, то условия выполняются, и RewriteRule
перезаписывает URL, обслуживая кэшированную страницу перед тем, как прекратить попытки перезаписи [L]
.
С точки зрения лучших параметров, это лучше, чем у PHPтак как он не запустит PHP для кэшированных страниц.Однако он будет проверять шаблон для каждого запроса ресурса.